复制多级文件夹下的文件

案例描述:

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 文件夹下:

posted @ 2022-05-28 22:04  鹿先森JIAN  阅读(94)  评论(0编辑  收藏  举报