はじめに
前回の続き.
Java を利用した copy だと, フォルダをコピーすると, 中身をコピーしない.
xcopy を利用.
中身をコピーする方法もあるようだけれども, めんどくさいので, xcopy を利用することにする.
- Windows での コマンドラインからコピーするコマンドまとめ (xcopy, robocopy, copy) | Futurismo
- コマンドプロンプト xcopy - ファイルをディレクトリ構造ごとコピーする
xcopy で ファイルですか, ディレクトリですかと質問されるので, echo F を 先頭につけたいところだが, この方法だと, うまくいかない.
ファイルならば, copy を利用する. フォルダならば, xcopy /i で OK.
Java で windows のコマンドを実行する
processBuilder ライブラリを利用する.
- ProcessBuilder (Java Platform SE 6)
- J2SE 5.0 Tiger 虎の穴 ProcessBuilder
- Java 外部プロセス起動メモ (Hishidama’s Java Process Memo)
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 ();
}
}
}