外部プロセスの実行のみであればProcessBuilderを利用し簡単に行えます。
String[] cmds = {"cmd.exe", "/k", "del", "C:\\sample.txt"};
ProcessBuilder b = new ProcessBuilder(cmds);
Process process = b.start();
boolean ret = process.waitFor(10, TimeUnit.MINUTES);
process.destroy();
※Windows環境でのコマンド
このプログラムを実行すればC:\sample.txtのファイルが削除されます。
外部プロセス実行後に、コンソール入力を求められるコマンドを実行する場合は
標準出力にコンソール入力値を出力してあげる必要があります。
コンソール入力値をプログラムから出力する例を以下に記述します。
以下の実行コマンドではdelコマンドに/pオプションを付けることで削除時に確認メッセージが表示されます。
確認時にプログラムより"Y"を入力し削除を実行します。
String[] cmds = {"cmd.exe", "/k", "del", "/p", "C:\\sample.txt"};
ProcessBuilder b = new ProcessBuilder(cmds);
Process process = b.start();
// 入力値の入力
String password = "Y";
PrintStream out = new PrintStream(process.getOutputStream());
out.println(password);
out.flush();
out.close();
boolean ret = process.waitFor(10, TimeUnit.MINUTES);
process.destroy();
※Windows環境でのコマンド
実際こんなプログラムは書かないですよね
で実際どういうときに役立つか
例えば証明書と秘密鍵を結合したPKCS12ファイルを作る場合などです。
PKCS12ファイルはjavaプログラムでは生成できないので外部プロセスのopensslを利用します。
プロセスを実行した後パスフレーズを求められます。
String processStr = "openssl pkcs12 -export -inkey greenwich.key -in greenwich.crt -out greenwich.p12";
Process process = r.exec(processStr);
Thread.sleep(1000); // 1秒待ってから処理しよう
PrintStream out = new PrintStream(process.getOutputStream());
String password = "greenwich"; // パスフレーズ
out.println(password);
out.flush();
Thread.sleep(1000); // 1秒待ってから処理しよう
out.println(password); // 再入力パスフレーズ
out.flush();
out.close();
boolean ret = process.waitFor(10, TimeUnit.MINUTES);
process.destroy();
※linux環境でのコマンド
こんな感じでパスフレーズを入力し証明書と秘密鍵からPKCS12ファイルを生成します。