需求:将"D:\Demo"路径下的所有文件复制到"E:\Demo"路径下。
思路
A:封装数据源
B:封装目的地,创建目的地路径
C:读取源路径所有文件并依次进行判断是否问文件夹
是:在指定路径创建该文件夹
否:创建输入流,输出流对象,按照一个一次读取一个字节数组的方式在指定路径复制该文件
package cn.lzw_06;
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 CopyMultiDirDemo {
public static void main(String[] args) throws IOException {
// 封装数据源 File= "D:\\Demo"
File srcFile = new File("D:\\Demo");
// 封装目的地,创建目的地文件夹
File destFile = new File("E:\\Demo");
destFile.mkdir();
//实现赋值文件和文件夹的功能
copyFile(srcFile,destFile);
}
private static void copyFile(File srcFile,File destFile) throws IOException {
// 获取目标文件夹中的所有目标文件的File对象
File[] fs = srcFile.listFiles();
// 增强For遍历数组,复制数组中的File对象
for (File ff : fs) {
if (ff.isDirectory()) {//判断该File对象是否为文件夹
File newFile = new File(destFile,ff.getName());
newFile.mkdir();// 如果是文件夹,在指定路径下创建此文件夹对象
copyFile(ff,newFile);//利用递归继续调用此方法,只有是文件才执行赋值操作
} else {
// 封装输入源(字节流)
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(ff));
// 封装目的地
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(destFile,ff.getName())));
// 一次读取一个字节数组
int len = 0;
byte[] by = new byte[1024];
while ((len = bis.read(by)) != -1) {
bos.write(by, 0, len);//写入
bos.flush();//刷新
}
// 释放资源
bis.close();
bos.close();
}
}
}
}