Java-复制多级文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.fluffysponge;

import java.io.*;

/**
* 需求:
* 把“E:\\com\\fluffysponge”复制到F盘目录下
* 思路:
* 1.创建数据源File对象,路径是E:\\com\\fluffysponge
* 2.创建目的地File对象,路径是F:\\
* 3.写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
* 4.判断数据源File是否是目录
* 是:
* A:在目的地下创建和数据源File名称一样的目录
* B:获取数据源File下所有文件或者目录的File数组
* C:遍历该File数组,得到每一个File对象
* D.把该File作为数据源File对象,递归调用复制文件夹的方法
* 不是:说明是文件,直接复制,用字节流
*
*/

public class CopyFolderDemo {
public static void main(String[] args) throws IOException {
//创建数据源File对象,路径是E:\\com\\fluffysponge
File srcFile = new File("E:\\com\\fluffysponge");
//创建目的地File对象,路径是F:\\
File destFile = new File("F:\\");

//写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
copyFolder(srcFile,destFile);
}

//复制文件夹
private static void copyFolder(File srcFile, File destFile) throws IOException {
//判断数据源File是否是目录
if(srcFile.isDirectory()){
//在目的地下创建和数据源File名称一样的目录
String srcFileName = srcFile.getName();
File newFolder = new File(destFile,srcFileName);
if(!newFolder.exists()){
newFolder.mkdir();
}

//获取数据源File下所有文件或者目录的File数组
File[] fileArray = srcFile.listFiles();

//遍历该File数组,得到每一个File对象
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 destFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

byte[] bys = new byte[1024];
int len;
while((len = bis.read(bys)) != -1){
bos.write(bys,0,len);
}
bos.close();;
bis.close();;
}
}