版权声明:本文为博主原创文章,但是欢迎转载! https://blog.csdn.net/yancola/article/details/75575423
问题描述
要复制多级文件夹,即文件夹中包含文件夹和文件,文件夹中又包含文件和文件夹的。
基本思想
显然要用到递归,判断当前File对象是文件夹还是文件,如果是文件就直接复制;如果是文件夹,就在目的地创建同名文件夹,再对文件夹下的File对象进行同样的判断和操作。
代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 复制目录
*/
public class FolderCopyDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// 封装数据源
File srcFile = new File("E:\\srcFolder");
// 封装目的地File
File destFile = new File("E:\\destFolder");
// 复制文件夹功能
copyFolder(srcFile, destFile);
}
private static void copyFolder(File srcFile, File destFile)
throws IOException {
// TODO Auto-generated method stub
// 判断该File是文件夹还是文件
if (srcFile.isDirectory()) {
// 文件夹
File newFolder =new File(destFile, srcFile.getName());
newFolder.mkdir();
//获取该File对象下的所有文件或文件夹File对象
File[] fileArray = srcFile.listFiles();
for(File file: fileArray){
copyFolder(file, newFolder);
}
} else {
// 文件
File newFile = new File(destFile, srcFile.getName());
copyFile(srcFile, newFile);
}
}
private static void copyFile(File srcFile, File newFile) throws IOException {
// TODO Auto-generated method stub
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
srcFile));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(newFile));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bos.close();
bis.close();
}
}