复制多级文件夹

来源:互联网 发布:淘宝上的汝窑茶具 编辑:程序博客网 时间:2024/06/05 08:00

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

基本思想
显然要用到递归,判断当前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();    }}
原创粉丝点击