复制多级文件夹下的文件
案例描述:
在 D:\iofile 文件夹下存在多级文件夹及文件,希望把这些全部复制到新位置(day10\iofile)
参考思路:复制单级文件夹下的文件 - 鹿先森JIAN - 博客园 (cnblogs.com)
import java.io.*; // 用到了递归思想 public class CopyFolders { public static void main(String[] args) throws IOException { //1.描述数据源文件夹File对象 File srcFolder = new File("D:\\iofile"); //2.获取数据源文件夹的名称 String srcFolderName = srcFolder.getName(); // iofile //3.构造目的地文件夹File对象 File destFolder = new File("day10", srcFolderName); // day10\iofile //4.判断不存在则创建该文件夹 if (!destFolder.exists()){ destFolder.mkdir(); // 创建一级文件夹:day10\iofile } copyFolder(srcFolder,destFolder); } public static void copyFolder(File srcFolder,File destFolder) throws IOException{ //5.遍历数据源文件夹,拿到下面的第一级的内容的File对象 File[] files = srcFolder.listFiles(); for (File file : files) { if (file.isDirectory()){ // 是否为文件夹 String srcZiFolderName = file.getName(); // 获取该文件夹名 File destZiFolder = new File(destFolder, srcZiFolderName); // 拼接 destZiFolder.mkdir(); // 创建拼接文件夹 copyFolder(file,destZiFolder); // 递归 }else { String srcFileName = file.getName(); // 获取该文件名 File destFile = new File(destFolder, srcFileName); // 拼接 copyFile(file,destFile); } } } // 复制全部文件 public static void copyFile(File srcFile,File destFile) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile)); // 缓冲流一次读写一个字节数组 int len; byte[] bytes = new byte[8192]; // 字符数组 while ((len = bis.read(bytes)) != -1){ // 读 bos.write(bytes,0,len); // 写 } bis.close(); bos.close(); } }
运行代码后,全部文件将会被复制到 day10\iofile 文件夹下: