# 复制文件
本文作者:程序员飞云
笔者近期遇到了文件复制的相关内容,虽然之前学过,但是一部分知识已经忘了,感觉还是有必要单独整理出来为之后找资料方便,近期也打算复习下IO相关知识。
# 1. 递归实现文件或者文件夹复制
步骤
- 判断是否为文件夹
- 是文件,就直接复制
- 是文件夹,需要创建新的文件夹,然后遍历里面的文件,继续递归
代码
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
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