package copy; /* 需求:复制多级文件夹 复制d:\itcast(包含文件和子文件夹)到模块目录下 分析: d:\itcast a.txt b.txt javaweb a.xml b.xml 模块\itcast javaweb a.xml b.xml a.txt b.txt 思路: 1.判断源文件是目录还是文件 2.是目录: 1.源目录名+目的目录,创建新目录File对象 2.判断新目录File是否存在,不存在则创建 3.获取源目录文件列表 4.遍历得到每个源文件对象 5.递归调用copyFolder方法 3.是文件: 复制源文件到目的目录 */ import java.io.*; public class CopyFolder { public static void main(String[] args) throws IOException { //创建源目录 File srcFolder = new File("d:\itcast"); //创建目的目录 File dstFolder = new File("day10Home"); //调用复制方法,复制目录或文件 copyFolder(srcFolder, dstFolder); } /** * 文件是否存在的检查工作,应该由方法调用者保证。 * @param src * @param dst * @throws IOException */ private static void copyFolder(File src, File dst) throws IOException { //1.是目录 if(src.isDirectory()){ //1.源目录名+目的目录,创建新目录File对象 File newFolder = new File(dst, src.getName()); //2.判断新目录File是否存在,不存在则创建 if(!newFolder.exists()) newFolder.mkdir(); //3.获取源目录文件列表 File[] fileArray = src.listFiles(); //4.遍历得到每个源文件对象 for(File srcFile : fileArray){ //5.递归调用copyFolder方法 copyFolder(srcFile, newFolder); } }else{ // 2.是文件,根据目的目录+源文件名,创建新文件 File newFile = new File(dst, src.getName()); copyFile(src, newFile); } } private static void copyFile(File srcFile, File newFile) throws IOException { // 创建字节缓冲流对象 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile)); // 读写数据,一次读写一个字节数组 byte[] bys = new byte[1024]; int len; while((len = bis.read(bys)) != -1){ bos.write(bys, 0, len); } // 释放资源 bos.close(); bis.close(); } }
案例2:删除多级文件夹
1 package deletefolder; 2 3 import java.io.File; 4 5 /* 6 需求: 7 将d:\itcast多级文件夹删除 8 d:\itcast 9 javaweb 10 a.xml 11 a.txt 12 b.txt 13 思路: 14 1.是否是目录 15 是目录: 16 2.获取文件列表 17 3.遍历文件列表得到每个文件对象 18 4.递归调用删除方法,删除目录中的每一项内容 19 2.直接删除src,此时src要么是空目录,要么是文件。 20 21 */ 22 public class DeleteFolder { 23 public static void main(String[] args) { 24 //创建要删除的多级目录 25 File file = new File("day10Home\itcast"); 26 27 //调用方法删除多级目录 28 deleteFolder(file); 29 30 } 31 32 private static void deleteFolder(File src) { 33 //1.是否是目录 34 if(src.isDirectory()){ 35 //2.获取文件列表 36 File[] fileArray = src.listFiles(); 37 38 //3.遍历文件列表得到每个文件对象 39 for(File file : fileArray){ 40 //4.递归调用删除方法,删除目录中的每一项内容 41 deleteFolder(file); 42 } 43 } 44 //5.将src删除,此时src要么是空目录,要么是文件。 45 src.delete(); 46 } 47 }