#ProcessBuilder
今の現場で、Java内からShellを叩けという要望があったので調べた結果、こちらの記事で紹介されていたProcessBuilderというものを使えば良いらしい。
リンク先コードを流用してしまっているが、実際に使うときは動的にプロセスの呼び先を変えるだろうな…
ということで、完全にメモ書き。
CallOutsideProcess.java
/**
呼び出し元で 引数を好きなだけ入れて呼び出す。
Ex) execute(new String[]{"ping","111,222,33,4"});
*/
public class CallOutsideProcess {
public void execute(String args[]) {
try {
Process process = new ProcessBuilder(args).start();
InputStream is = process.getInputStream();
/* プロセス実行側での文字列等の出力によっては、
文字コードが一致しないと、受け取る際に文字化けを起こす*/
InputStreamReader isr = new InputStreamReader(is, "Shift-JIS");
// InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
builder.append((char) c);
}
// コンソール出力される文字列の格納
text = builder.toString();
// 終了コードの格納(0:正常終了 1:異常終了)
int ret = process.waitFor();
System.out.println(text);
System.out.println(ret);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
割と今後使いそうな内容だったので、覚えておこう…
(…忘れても見れば思い出すように書いてるんだけど)