1 package day10.lesson1.p3;
2
3 import java.io.*;
4
5 /*
6 1.3 案例-复制多级文件夹
7
8 1. 创建数据源File对象
9 2. 创建目的地File对象
10 3. 写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
11 4. 判断数据源File是否是文件
12 是文件:
13 直接复制,用字节流
14 不是文件:
15 在目的地下创建与数据源File名称一样的目录,
16 获取数据源File下的所有文件或者子目录的File数组,
17 遍历该File数组,得到每一个File对象,
18 把该File作为数据源File对象,递归调用文件夹复制方法
19 */
20 public class CopyFoldersDemo {
21 public static void main(String[] args) throws IOException{
22 File srcFile = new File("stage2\\src\\day10\\lesson1\\p3\\source\\test");
23 File destFile = new File("stage2\\src\\day10\\lesson1\\p3\\copy");
24
25 copyFolder(srcFile, destFile);
26 }
27
28
29 private static void copyFolder(File srcFile, File destFile) throws IOException{
30 if(srcFile.isDirectory()){
31 String srcFileName = srcFile.getName();
32 File newFolder = new File(destFile, srcFileName); //拼接
33 if(!newFolder.exists()){
34 newFolder.mkdir();
35 }
36
37 File[] listFiles = srcFile.listFiles();
38 for (File file: listFiles){ //此处file可能是文件,也可能是文件夹
39 copyFolder(file, newFolder); //递归
40 }
41 }else { //srcFile是文件,直接复制
42 File newFile = new File(destFile, srcFile.getName()); //拼接
43 copyFile(srcFile, newFile);
44 }
45 }
46
47
48 private static void copyFile(File srcFile, File destFile) throws IOException {
49 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
50 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
51
52 byte[] bytes = new byte[1024];
53 int len;
54 while ((len=bis.read(bytes)) != -1){
55 bos.write(bytes, 0, len);
56 }
57
58 bos.close();
59 bis.close();
60 }
61 }
