当前位置: 首页 > news >正文

递归遍历目录 和 普通文件的复制 [Java EE]

递归遍历目录

首先

先列出当前目录所包含的内容

File[] files = currentDir.listFiles();
        if (files == null || files.length == 0) {
            // 若是空目录或非法目录, 则直接返回
            return;
        }

然后

遍历列出的文件, 分情况两种讨论

        for (File f: files) {
            // 加个日志, 方便查看程序执行情况
            System.out.println(f.getAbsolutePath());
            if (f.isFile()) {
                // 如果当前文件是普通文件, 看看文件名是否包含了 word, 来决定是否删除
                dealFile(f, word);
            }else {
                // 如果当前文件时目录文件, 就递归执行 scanDir
                scanDir(f, word);
            }
        }

最后完整代码展示


    private static  Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的根目录: ");
        File rootPath = new File(scanner.next()) ;
        System.out.println("请输入要删除的关键词:");
        String word = scanner.next();

        if (!rootPath.isDirectory()) {
            System.out.println("您此时输入的路径不是合法目录!");
            return;
        }

        scanDir(rootPath, word);
    }

    public static void scanDir(File currentDir, String word) {
        File[] files = currentDir.listFiles();
        if (files == null || files.length == 0) {
            return;
        }

        for (File f: files) {
            System.out.println(f.getAbsolutePath());
            if (f.isFile()) {
                dealFile(f, word);
            }else {
                scanDir(f, word);
            }
        }
    }

    private static void dealFile(File f, String word) {
        if (!f.getName().contains(word)) {
            System.out.println("未找到你所输入的关键字文件, 程序将结束!");
            return;
        }
        System.out.println("该文件是: "+ f.getAbsolutePath()  + ", 是否要确认删除? (Y/N)");
        String choise = scanner.next();
        if (choise.equals("Y") || choise.equals("y")) {
            f.delete();
        }

    }

普通文件复制

// 把文件 A 复制成 文件 B 的基本步骤就是: 先打开文件 A , 依次读取文件 A 的每个字节, 然后再写入文件 B 就可以

// 直接代码展示一下

 public static void main(String[] args) throws IOException {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入要复制的文件路径: ");
        String src = s.next();
        File srcFile = new File(src);
        if (!srcFile.isFile()) {
            System.out.println("您输入的源文件路径非法!");
            return;
        }
        System.out.println("请输入要复制的目标路径: ");
        String dest = s.next();
        File destFile = new File(dest);
        if (!destFile.getParentFile().isDirectory()) {
            System.out.println("您输入的目标文件路径非法! ");
            return;
        }

        try (InputStream inputStream = new FileInputStream(srcFile);
             OutputStream outputStream = new FileOutputStream(destFile)){
            while (true) {
                byte[] buffer = new byte[20480];
                int n = inputStream.read(buffer);
                System.out.printf("n = %x ", n);
                if (n == -1) {
                    System.out.println("读取到 eof, 循环结束");
                    break;
                }
                outputStream.write(buffer,0,n);
            }
        }
    }

相关文章:

  • 【Azure 架构师学习笔记】- Azure Databricks (13) -- 搭建Medallion Architecture part 1
  • FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析
  • Apache Spark中的依赖关系与任务调度机制解析
  • 计算机考研之数据结构:斐波那契数列专题(2)
  • tensorflow + sionna 安装踩坑记录(待补充)
  • ZT36 小红和小紫的取素因子游戏
  • 云和恩墨亮相PolarDB开发者大会,与阿里云深化数据库服务合作
  • vscode脚本 shell 调试
  • 大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)
  • Redis 深度解析
  • 七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)
  • 【Linux高级IO】五种IO模型 多路转接(select)
  • ArcGIS Pro应用:精准计算容积率的详细指南
  • 基于STM32的智能停车场管理系统
  • 《AI强化学习:元应用中用户行为引导的智能引擎》
  • 【Qt】编程基础
  • 大白话React Hooks(如 useState、useEffect)的使用方法与原理
  • API网关相关知识点
  • 软件工程----4+1架构模型
  • GitHub 入门指南(2025最新版)
  • 定制版网站建设详细报价单/网页设计代码大全
  • 男生可以做网站编辑工作吗/谷歌 翻墙入口
  • 迅睿cms建站/爱站网关键字挖掘
  • 合肥外贸网站建设/推广赚钱的平台有哪些
  • 网站建设详细需求说明书/今日国内新闻大事20条
  • 成都建设监理协会网站网址/百度百科入口