复制多级文件夹

版权声明:本文为博主原创文章,但是欢迎转载! https://blog.csdn.net/yancola/article/details/75575423

问题描述
要复制多级文件夹,即文件夹中包含文件夹和文件,文件夹中又包含文件和文件夹的。

基本思想
显然要用到递归,判断当前File对象是文件夹还是文件,如果是文件就直接复制;如果是文件夹,就在目的地创建同名文件夹,再对文件夹下的File对象进行同样的判断和操作。

代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 复制目录
 */
public class FolderCopyDemo {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        // 封装数据源
        File srcFile = new File("E:\\srcFolder");
        // 封装目的地File
        File destFile = new File("E:\\destFolder");

        // 复制文件夹功能
        copyFolder(srcFile, destFile);
    }

    private static void copyFolder(File srcFile, File destFile)
            throws IOException {
        // TODO Auto-generated method stub
        // 判断该File是文件夹还是文件
        if (srcFile.isDirectory()) {
            // 文件夹
            File newFolder =new File(destFile, srcFile.getName());
            newFolder.mkdir();

            //获取该File对象下的所有文件或文件夹File对象
            File[] fileArray = srcFile.listFiles();
            for(File file: fileArray){
                copyFolder(file, newFolder);
            }
        } else {
            // 文件
            File newFile = new File(destFile, srcFile.getName());
            copyFile(srcFile, newFile);
        }
    }

    private static void copyFile(File srcFile, File newFile) throws IOException {
        // TODO Auto-generated method stub
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(newFile));

        byte[] bys = new byte[1024];
        int len = 0;
        while ((len = bis.read(bys)) != -1) {
            bos.write(bys, 0, len);
        }
        bos.close();
        bis.close();
    }

}

猜你喜欢

转载自blog.csdn.net/yancola/article/details/75575423