Java で windows のコマンドを実行してフォルダコピー

はじめに

前回の続き.

Java を利用した copy だと, フォルダをコピーすると, 中身をコピーしない.

xcopy を利用.

中身をコピーする方法もあるようだけれども, めんどくさいので, xcopy を利用することにする.

xcopy で ファイルですか, ディレクトリですかと質問されるので, echo F を 先頭につけたいところだが, この方法だと, うまくいかない.

ファイルならば, copy を利用する. フォルダならば, xcopy /i で OK.

Java で windows のコマンドを実行する

processBuilder ライブラリを利用する.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class XCopyOperator {
    public static void main (String args[]) throws IOException, InterruptedException {
        String source = "foo";
        String target = "bar";

        // Process Builder 生成
        // xcopy /e /i source target ディレクトリを再帰的にコピー
        ProcessBuilder pb = new ProcessBuilder ("xcopy", "/e", "/i", source, target);

        // 標準出力と標準エラーをマージする (Defualt false)
        pb.redirectErrorStream (true);

        // プロセス開始
        Process process = pb.start ();

        // プロセス完了待ち合わせ
        process.waitFor ();

        // 結果の出力
        InputStream is = process.getInputStream ();
        printInputStream (is);
    }

    public static void printInputStream (InputStream is) throws IOException {
        BufferedReader br = new BufferedReader (new InputStreamReader (is));
        try {
            for (;;) {
                String line = br.readLine ();
                if (line == null) break;
                System.out.println (line);
            }
        } finally {
            br.close ();
        }
    }
}