Skip to content

复制文件

约 420 字大约 1 分钟

SpringBoot

2025-03-04

本文作者:程序员飞云

本站地址:https://www.flycode.icu

笔者近期遇到了文件复制的相关内容,虽然之前学过,但是一部分知识已经忘了,感觉还是有必要单独整理出来为之后找资料方便,近期也打算复习下IO相关知识。

1. 递归实现文件或者文件夹复制

步骤

  1. 判断是否为文件夹
  2. 是文件,就直接复制
  3. 是文件夹,需要创建新的文件夹,然后遍历里面的文件,继续递归

代码

public static void doCopy(File inputFile, File outputFile) throws IOException {
        // 判断输入文件是否为文件夹
        if (inputFile.isDirectory()) {
            System.out.println("文件夹名: " + inputFile.getName());
            // 建立新的文件夹
            File newDir = new File(outputFile, inputFile.getName());
            // 判断新的文件夹是否存在
            if (!newDir.exists()) {
                newDir.mkdirs();
            }
            // 遍历文件
            File[] files = inputFile.listFiles();
            // 需要判空
            if (files == null) {
                return;
            }
            for (File file : files) {
                // 递归调用,复制文件夹内的每个文件或子文件夹
                doCopy(file, newDir);
            }
        } else {
            // 是文件
            System.out.println("文件名称: " + inputFile.getName());
            System.out.println("文件大小: " + inputFile.length());
            // 构建目标文件路径
            Path destPath = outputFile.toPath().resolve(inputFile.getName());
            // 使用Java NIO的Files.copy方法复制文件,替换已存在的目标文件
            Files.copy(inputFile.toPath(), destPath, StandardCopyOption.REPLACE_EXISTING);
        }
    }

当然里面还存在一些问题,这个需要之后完善,这里面借鉴了部分hutool的写法,自己写主要是可扩展性比较强,比如文件大小,树形展示文件等等,这些事工具无法涉及到的。

2. Hutool工具类

https://doc.hutool.cn/pages/FileUtil/#%E7%AE%80%E4%BB%8B

  FileUtil.copy(inputPath, targetPath, false);

贡献者

  • flycodeuflycodeu

公告板

2025-03-04正式迁移知识库到此项目