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 }