复制多级文件夹
- 需求:把"把D\itCast"这个文件夹复制到模块目录下
- 思路:
创建数据源目录File对象,路径是D:\itCast
获取数据源目录File对象,路径是D:\item\Hellow\src
写方法实现实现文件文件夹的复制,参数为数据源File对象和目的地File对象 - 判断File是否为目录
是:
A:在目的地下创建和数据源File名称一样的目录
B:获取数据源File下所有文件或者目录的File数组
C:遍历该File数组,得到每一个File对象
D:把该File作为数据源File对象,递归调用复制文件夹的方法
不是:说明是文件,直接复制,用字节流
以代码形式讲解
package Demo;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
//创建数据源目录File对象,路径是D:\\itCast
File file = new File("D:\\itCast");
//获取数据源目录File对象,路径是D:\\item\\Hellow\\src
File file1 = new File("D:\\item\\Hellow\\src");
//写方法实现实现文件文件夹的复制,参数为数据源File对象和目的地File对象
copyFolder(file,file1);
}
//复制文件夹
private static void copyFolder(File x,File file1) throws IOException {
//判断数据源是不是目录
if (x.isDirectory()){
//在目的地下创建和数据源File名称一样的目录
String name = x.getName();
File file2 = new File(file1, name);//D:\\item\\Hellow\\src\\itCast
if (!file2.exists()){
file2.mkdir();
}
//获取数据源File下所有目录或者文件的File类数组
File[] fileArray = x.listFiles();
for (File file : fileArray) {
copyFolder(file,file2);
}
}else{
//说明是文件,直接复制,用字节流
File file = new File(file1, x.getName());
copyFile(x,file);
}
}
private static void copyFile(File x,File file2) throws IOException {
//建立字节缓冲输入流
BufferedInputStream bi = new BufferedInputStream(new FileInputStream(x));
//建立字节缓冲输出流
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(file2));
//复制文件
int len;
byte[] bytes = new byte[1024];
while((len=bi.read(bytes))!=-1){
bo.write(bytes, 0, len);
}
//释放资源
bi.close();
bo.close();
}
}
输出的内容
注意内容: