使用 IO 流复制目录
程序员文章站
2022-03-27 20:14:15
场景:要将 D 盘上的某个文件夹通过 IO 流复制到 E 盘下的某个文件夹中。实现:在一个 文件工具类中,通过 IO 流技术,运用递归算法,实现了一个简单的磁盘上文件夹的复制代码:public class FileUtil { /** * 复制目录 * * @param srcFile 源文件 * @param destFile 目标文件 */ public static void copyDir(File s...
场景:要将 D 盘上的某个文件夹通过 IO 流复制到 E 盘下的某个文件夹中。
实现:
在一个 文件工具类中,通过 IO 流技术,运用递归算法,实现了一个简单的磁盘上文件夹的复制
代码:
public class FileUtil {
/**
* 复制目录
*
* @param srcFile 源文件
* @param destFile 目标文件
*/
public static void copyDir(File srcFile, File destFile) throws Exception{
// 判断是否为文件
if (srcFile.isFile()) {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream((destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath()
: destFile.getAbsolutePath() + "\\") + srcFile.getAbsolutePath().substring(3));
byte[] bytes = new byte[1024 * 1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
fos.flush();
fis.close();
fos.close();
} else {
// 如果不是文件,则获取它的下级目录
File[] files = srcFile.listFiles();
if (null != files) {
if (files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
String srcDir = file.getAbsolutePath();
String destDir = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath()
: destFile.getAbsolutePath() + "\\") + srcDir.substring(3);
// 生成文件夹
File newFile = new File(destDir);
if (!newFile.exists()) {
newFile.mkdirs();
}
}
// 递归调用
copyDir(file, destFile);
}
}
}
}
}
}
通过 main() 方法进行测试:
public static void main(String[] args) throws Exception{
String srcFilePath = "D:\\docs";
String destFilePath = "E:\\zzc\\test\\";
File srcFile = new File(srcFilePath);
if (!srcFile.exists()) {
throw new RuntimeException("此文件路径不存在");
}
File destFile = new File(destFilePath);
// 防止源文件夹中的路径名不会被生成(当遍历源文件夹第一个 File 为文件时,是不会生成 "ttt" 路径名)
String path = (destFilePath.endsWith("\\") ? destFilePath : destFilePath + "\\") + srcFilePath.substring(3);
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
FileUtil.copyDir(srcFile, destFile);
}
我认为,这种场景很典型,所以,这里就把它给记录下来了~~
本文地址:https://blog.csdn.net/Lucky_Boy_Luck/article/details/109266155
推荐阅读
-
Linux下如何使用cp命令复制文件及复制目录
-
linux中cp 命令使用介绍(复制文件或者目录)
-
Java分享笔记:使用缓冲流复制文件
-
Java使用IO流读取文件显示到控制台2
-
使用文件流与使用缓冲流完成文件的复制操作性能对比,文件流 FileInputStream FileOutputStream 缓冲流: BufferedInputStream BufferedOutputStream
-
C# 基础知识系列- 14 IO篇 流的使用
-
Java IO流 实现复制文件多个并显示进度
-
(javase)使用io流和多线程编写一个小程序
-
使用Docker安装RabbitMQ (带配置文件目录映射,复制粘贴即可使用)
-
IO流的使用