Java-拷贝文件夹

Java-拷贝文件夹

Tags: Java

摘要

Java-拷贝文件夹

拷贝文件夹

拷贝文件夹,其实就是要递归拷贝文件夹下所有的子文件夹及文件。

拷贝文件夹例子

例子是演示拷贝文件夹/home/zhu/javacore.cn/Directory2到一个新的目录/home/zhu/javacore.cn/DirectoryNew

package cn.javacore.io.directory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class _03_CopyDirectoryExample {
    public static void main(String[] args) {

        File srcFolder = new File("/home/zhu/javacore.cn/Directory2");
        File destFolder = new File("/home/zhu/javacore.cn/DirectoryNew");

        //make sure source exists
        if (!srcFolder.exists()) {

            System.out.println("Directory does not exist.");
            //just exit
            System.exit(0);

        } else {

            try {
                copyFolder(srcFolder, destFolder);
            } catch (IOException e) {
                e.printStackTrace();
                //error, just exit
                System.exit(0);
            }
        }

        System.out.println("Done");
    }

    public static void copyFolder(File src, File dest)
            throws IOException {

        if (src.isDirectory()) {

            //if directory not exists, create it
            if (!dest.exists()) {
                dest.mkdir();
                System.out.println("Directory copied from "
                        + src + "  to " + dest);
            }

            //list all the directory contents
            String files[] = src.list();

            for (String file : files) {
                //construct the src and dest file structure
                File srcFile = new File(src, file);
                File destFile = new File(dest, file);
                //recursive copy
                copyFolder(srcFile, destFile);
            }

        } else {
            //if file, then copy it
            //Use bytes stream to support all file types
            InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dest);

            byte[] buffer = new byte[1024];

            int length;
            //copy the file content in bytes
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }

            in.close();
            out.close();
            System.out.println("File copied from " + src + " to " + dest);
        }
    }
}

输出结果

Directory copied from /home/zhu/javacore.cn/Directory2  to /home/zhu/javacore.cn/DirectoryNew
Directory copied from /home/zhu/javacore.cn/Directory2/Sub2  to /home/zhu/javacore.cn/DirectoryNew/Sub2
File copied from /home/zhu/javacore.cn/Directory2/Sub2/ABC2.file to /home/zhu/javacore.cn/DirectoryNew/Sub2/ABC2.file
Directory copied from /home/zhu/javacore.cn/Directory2/Sub2/Sub-Sub2  to /home/zhu/javacore.cn/DirectoryNew/Sub2/Sub-Sub2
File copied from /home/zhu/javacore.cn/Directory2/B.file to /home/zhu/javacore.cn/DirectoryNew/B.file
File copied from /home/zhu/javacore.cn/Directory2/A.file to /home/zhu/javacore.cn/DirectoryNew/A.file
Done