Javaでディレクトリをコピーする方法

Javaでディレクトリをコピーする方法

ディレクトリとそのすべてのサブディレクトリとファイルを新しい宛先ディレクトリにコピーする例を次に示します。 コードにはコメントがたくさんあり、説明も必要ありませんが、さらに説明が必要な場合はコメントを残してください。

フォルダ「c:\example」とそのサブディレクトリおよびファイルを別の新しいフォルダ「c:\example-new」にコピーします。

package com.example.file;

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 CopyDirectoryExample
{
    public static void main(String[] args)
    {
        File srcFolder = new File("c:\\example");
        File destFolder = new File("c:\\example-new");

        //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 c:\example  to c:\example-new
File copied from c:\example\404.php to c:\example-new\404.php
File copied from c:\example\footer.php to c:\example-new\footer.php
File copied from c:\example\js\superfish.css to c:\example-new\js\superfish.css
File copied from c:\example\js\superfish.js to c:\example-new\js\superfish.js
File copied from c:\example\js\supersubs.js to c:\example-new\js\supersubs.js
Directory copied from c:\example\images  to c:\example-new\images
File copied from c:\example\page.php to c:\example-new\page.php
Directory copied from c:\example\psd  to c:\example-new\psd
...
Done