本文作者:程序员飞云
笔者近期遇到了文件复制的相关内容,虽然之前学过,但是一部分知识已经忘了,感觉还是有必要单独整理出来为之后找资料方便,近期也打算复习下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); } }当然里面还存在一些问题,这个需要之后完善,这里面借鉴了部分hutool的写法,自己写主要是可扩展性比较强,比如文件大小,树形展示文件等等,这些事工具无法涉及到的。
2. Hutool工具类
https://doc.hutool.cn/pages/FileUtil/#%E7%AE%80%E4%BB%8B
FileUtil.copy(inputPath, targetPath, false);
评论