[Java] 65 外部コマンドの実行

Javaにおける配列、リスト、CSVファイルの取り扱いが私にとってはあまりに煩雑なので、外部コマンドにてPythonスクリプトを走らせることにします。

昨日はArrayListをCSVファイルに変換するのに散々痛い目にあって懲りました。JavaでCSVファイルの内容を読み込んで集計するなんてPythonユーザーの私にはかなりの苦行です。

JavaからPythonスクリプトを直接呼び出せないのでコンソールコマンドを使います。戻り値のやりとりはできないため、CSVファイル等を介してデータを出し入れします。

コンソールコマンドを実行するクラスは以下の通りです。

Javaとの実用面での関わりはGUI作成限定になりそうです。好きな言語ではありますが、コーディング快適性や開発速度を考慮しての結論です。

JavaはC言語と同様、実装に使うかどうかはともかく学習対象であることは変わりません。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class ProcessExecutor {
    public static void main() throws Exception {
    	System.out.println("ProcessExecutor");

        ProcessBuilder p = new ProcessBuilder("sh", "-c", "python test.py ; echo 'コマンド完了'");

        p.redirectErrorStream(true);

        // コマンドを実行する
        Process process = p.start();

        // 結果を受け取る
        try (BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.defaultCharset()))) {
            String line;
            while ((line = r.readLine()) != null) {
                System.out.println(line);
            }
        }
        process.waitFor();
        int result = process.exitValue();
        System.out.printf("result = %d%n", result);
    }
}