外部コマンドをつかって指定ディレクトリをアーカイブ圧縮するプログラムがうまくいかない?
コマンドがおかしいのかと思い亜マンドを直接打ち込むと実行される。
どうしてだろうと調べていると、Runtime#execからの外部コマンドってJava (1.4)プログラム側でコマンドの出力を読み出していないと、バッファがいっぱいになって外部コマンドがその出力待ちで途中で止まってしまうとのこと。
とうことで以下のようにしたら実行できました。
/**
* 圧縮アーカイブを作成
* tar cvzf 圧縮アーカイブ名.tar.gz 対象ディレクトリ(ファイル名)
* @throws IOException 入出力エラー
* @throws InterruptedException 割り込みが発生した場合に投げられる例外
*/
public void compressArchive(String archiveName, String targetName)
throws IOException, InterruptedException{
//コマンドの作成
String command = "tar cvzf ";
command = command + archiveName + " " + targetName;
InputStream is = null;
BufferedReader br = null;
Process process = null;
Runtime runtime = null;
try {
log.info("—- CompressArchive has started: command=" +
command + "——");
runtime = Runtime.getRuntime();
process = runtime.exec(command);
is = process.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
log.info(line);
}
}
catch(IOException e) {
log.error(e);
}
finally {
process.waitFor();
log.info("—- CompressArchive has completed code: " +
process.exitValue() + "——");
process.destroy();
br.close();
}
}