# 复制文件

本文作者:程序员飞云

本站地址:https://www.flycode.icu (opens new window)

笔者近期遇到了文件复制的相关内容,虽然之前学过,但是一部分知识已经忘了,感觉还是有必要单独整理出来为之后找资料方便,近期也打算复习下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);
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

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

# 2. Hutool工具类

https://doc.hutool.cn/pages/FileUtil/#%E7%AE%80%E4%BB%8B (opens new window)

  FileUtil.copy(inputPath, targetPath, false);
1
最近更新: 12/30/2024, 12:04:33 AM
飞云编程   |