LoginSignup
8
8

More than 5 years have passed since last update.

Javaで外部プロセスを実行する

Posted at

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();
        }
    }
}

割と今後使いそうな内容だったので、覚えておこう…
(…忘れても見れば思い出すように書いてるんだけど)

8
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8