前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制

Java实现1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制

作者头像
Maynor
发布2021-04-09 11:36:31
4720
发布2021-04-09 11:36:31
举报
文章被收录于专栏:最新最全的大数据技术体系
代码语言:javascript
复制
package JAVA做一个文件管理器;

import java.io.*;
import java.util.Scanner;

public class FileUtils {
    public static void main(String[] args) throws IOException {
        /** * 复制文件夹或文件夹 */
        // 源文件夹
        String url1 = "f:/photos";
        // 目标文件夹
        String url2 = "d:/tempPhotos";

            // 创建目标文件夹
            (new File(url2)).mkdirs();
            // 获取源文件夹当前下的文件或目录
            File[] file = (new File(url1)).listFiles();
            for (int i = 0; i < file.length; i++) {
                if (file[i].isFile()) {
                    // 复制文件
                    copyFile(file[i],new File(url2+file[i].getName()));
                }
                if (file[i].isDirectory()) {
                    // 复制目录
                    String sourceDir=url1+File.separator+file[i].getName();
                    String targetDir=url2+File.separator+file[i].getName();
                    copyDirectiory(sourceDir, targetDir);
                }
            }

        //输出语句(显示操作菜单)
       System.out.println("**********1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制   4.退出***********************");

        System.out.println("请输入对应的操作");
        //创建一个键盘扫描器
        Scanner sc = new Scanner(System.in);
        //接收用户的输入整数
        int key = sc.nextInt();
        //根据用户判断是哪一操作
        //在等值比较的时候,优先考虑switch..case,但使用switch的时候一定要注意
        //int char String 枚举
        //byte short int char String 枚举
        switch (key){
            case 1:
                //TODO 根据关键字搜索文件
                searchByKeyWorld();
                break;
            case 2:
                //TODO  根据指定的后缀名搜索文件
                searchByLastWord();
                break;
            case 3:
                //TODO  文件/文件夹的复制
                break;
            case 4:
                //退出
                System.exit(0);//中止
                break;
            default:
                System.out.println("操作错误,请输入正确指令");
                break;
        }

    }
    private static void searchByLastWord() {
//提醒用户输入需要搜索的目录
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要检索的目录:");

        //再提醒用户输入需要搜索的后缀
        String path = sc.nextLine();
        System.out.println("请输入要检索的后缀");
        String key = sc.nextLine();
        File file = new File(path);
        //通过用户指定的目录去搜索后缀
        listSuffix(file,key);
        //告诉用户是否搜索到文件
        System.out.println("搜完了!");
    }

    private static void listSuffix(File file, String key) {
        //获取当前目录所有File对象
        File[] files = file.listFiles();
        //把每一个file对象拿出来判断,首先判断是目录还是文件,
        //如果是目录则继续搜索,文件则判断是否包含关键字
        for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳
            //判断元素是否是后缀
            String exegc ="^"+key+"$";
            if (file2.isDirectory()){
                listFile(file2,key);
            }else {
                if (file2.getName().endsWith(exegc)){
                    System.out.println(file2.getAbsolutePath());
                }
            }
        }
    }

    private static void searchByKeyWorld() {
        //提醒用户输入需要搜索的目录
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要检索的目录:");

        //再提醒用户输入需要搜索的关键字
        String path = sc.nextLine();
        System.out.println("请输入要检索的关键字");
        String key = sc.nextLine();
        File file = new File(path);
        //通过用户指定的目录去搜索指定关键字
        listFile(file,key);
        //告诉用户是否搜索到文件
        System.out.println("搜完了!");
    }

    //具体搜索关键字的方法
    private static void listFile(File file, String key) {
        //获取当前目录所有File对象
        File[] files = file.listFiles();
        //把每一个file对象拿出来判断,首先判断是目录还是文件,
        //如果是目录则继续搜索,文件则判断是否包含关键字
        for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳
            //判断元素是否是目录
            if (file2.isDirectory()){
                listFile(file2,key);
            }else {
                if (file2.getName().contains(key)){
                    System.out.println(file2.getAbsolutePath());
                }
            }
        }


    }

        // 复制文件
        public static void copyFile(File sourceFile,File targetFile) throws IOException{
            // 新建文件输入流并对它进行缓冲
            FileInputStream input = new FileInputStream(sourceFile);
            BufferedInputStream inBuff=new BufferedInputStream(input);
            // 新建文件输出流并对它进行缓冲
            FileOutputStream output = new FileOutputStream(targetFile);
            BufferedOutputStream outBuff=new BufferedOutputStream(output);
            // 缓冲数组
            byte[] b = new byte[1024 * 5];
            int len;
            while ((len =inBuff.read(b)) != -1) {
                outBuff.write(b, 0, len);
            }
            // 刷新此缓冲的输出流
            outBuff.flush();
            //关闭流
            inBuff.close();
            outBuff.close();
            output.close();
            input.close();
        }

        // 复制文件夹
        public static void copyDirectiory(String sourceDir, String targetDir) throws IOException {
            // 新建目标目录
            (new File(targetDir)).mkdirs();
            // 获取源文件夹当前下的文件或目录
            File[] file = (new File(sourceDir)).listFiles();
            for (int i = 0; i < file.length; i++) {
                if (file[i].isFile()) {
                    // 源文件
                    File sourceFile=file[i];
                    // 目标文件
                    File targetFile=new File(new File(targetDir).getAbsolutePath() +File.separator+file[i].getName());
                    copyFile(sourceFile,targetFile);
                }
                if (file[i].isDirectory()) {
                    // 准备复制的源文件夹
                    String dir1=sourceDir + "/" + file[i].getName();
                    // 准备复制的目标文件夹
                    String dir2=targetDir + "/"+ file[i].getName();
                    copyDirectiory(dir1, dir2);
                }
            }
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档