黑马程序员技术交流社区

标题: 多级文件夹的复制 [打印本页]

作者: _J2EE_LiXiZhen    时间: 2017-11-21 21:44
标题: 多级文件夹的复制
[Java] 纯文本查看 复制代码
public class Demo {

        /*
         * 复制多级文件夹 分析:
         *         1:目录下包含有目录和文件。
         *  2:用递归实现这个操作,
         *          判断是目录就创建。
         *          是文件就创建并拷贝。
         *
         * 把d盘目录下的source目录内容拷贝到e盘目录下。
         */
        public static void main(String[] args) {
                // aaa 文件夹 --> e 盘下  
                File source = new File("d:\\aaa");
                File target = new File("e:\\");
                copyDir(source, target);

        }

        // 拷贝目录
        private static void copyDir(File source, File target) {

                // 在target下创建同名目录
                File dir = new File(target, source.getName()); // dir 就是  e://aaa
               
                // 判断source
                if (source.isDirectory()) {
                        // 是目录 , 创建目录
                        dir.mkdirs();
                        // 遍历source下所有的子文件,将每个子文件作为source,将新创建的目录作为target进行递归。
                        File[] files = source.listFiles();
                        for (File file : files) {
                                // file 是 src 所有 文件和文件夹
                                // dir 是目标目录, dir 下继续创建目录
                                copyDir(file, dir);
                        }
                } else {
                        // 是文件
                        // 在target目录下创建同名文件,然后用流实现文件拷贝。

                        copyFile(source, dir);
                }
        }

        // 拷贝文件
        private static void copyFile(File source, File file) {
                // 创建流对象
                InputStream is = null;
                OutputStream os = null;
                try {
                        is = new FileInputStream(source);
                        os = new FileOutputStream(file);

                        // 基本读写操作
                        byte[] bys = new byte[1024];
                        int len = 0;
                        while ((len = is.read(bys)) != -1) {
                                os.write(bys, 0, len);
                        }
                } catch (IOException e) {
                        throw new RuntimeException("复制失败");
                } finally {
                        try {
                                if (os != null) {
                                        os.close();
                                }
                        } catch (IOException e) {

                        }

                        try {
                                if (is != null) {
                                        is.close();
                                }
                        } catch (IOException e) {

                        }
                }
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2