JavaのProcessBuilderを使ってバッチファイルを実行する方法【初心者向け】
初心者向けにProcessBuilderを使う方法について解説しています。ProcessBuilderを使うと外部プログラムを実行することができます。実行の流れと基本の書き方について、サンプルプログラムを見ながら学習しましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
ProcessBuilderを使う方法について解説します。
実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
今回は、Javaに関する内容だね!
どういう内容でしょうか?
ProcessBuilderを使う方法について詳しく説明していくね!
お願いします!
目次
ProcessBuilderとは
「ProcessBuilder」とは、Javaから外部プログラムを実行するために使用するクラスです。
外部プログラムは、例えばWindowsであれば拡張子.bat、.cmdなどのバッチプログラム、MacやLinuxなどであればシェルスクリプトなどのことを指しています。
旧バージョンのJava(〜JDK1.4)では「Runtime」というクラスがその役割を担っていましたが、現在はそれより新しいクラスである「ProcessBuilder」を使うのがよりよい作法とされています。
JavaのProcessBuilderを使ってバッチファイルを実行する方法
「ProcessBuilder」を使って外部プログラムを実行するには、次の手順で行います。
- 実行する外部プログラムを指定してProcessBuilderインスタンスを生成する
ProceddBuilderインスタンスを作成するには以下のように記述しますProcessBuilder ProcessBuilderの変数 = new ProcessBuilder(String... command);
ProcessBuilderに渡す引数には起動するプログラム名とプログラムに渡す引数を設定してあげます。
- プロセスを開始する
1でProcessBuilderインスタンスが作成できたら次はプロセスを開始していきます。
開始するには以下のように記述します。Process Processの変数 = ProcessBuilderの変数.start();
1で設定したプログラムを起動し、そこに1で設定した引数を渡してあげます。
- 結果を受け取る
2でプロセスを起動させたら最後にその結果を受け取ります。
受け取るには以下のように記述しますtry (BufferedReader 変数 = new BufferedReader(new InputStreamReader(Processの変数.getInputStream()))) { String 文字列; while ((String 文字列 =変数.readLine()) != null) { 処理; } }
2で作成したProcessの変数からgetInputStreamメソッドを使うことでInputStreamオブジェクトを取得することができます。そこからInputStreamReaderクラスとBufferReaderクラスを使うことでプロセスを実行した結果を受け取ることができます。
サンプルプログラムで、上記の手順に対応するコードを確認してみましょう。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.charset.Charset; public class ProcessExecutor { public static void main(String[] args) throws Exception { // 実行する外部プログラムを指定してProcessBuilderインスタンスを生成する // Macの場合はこちら ProcessBuilder p = new ProcessBuilder("sh", "-c", "echo 'Hello!'"); // Windowsの場合はこちら // ProcessBuilder p = new ProcessBuilder("cmd", "/c", "echo", "Hello!"); 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); } } int result = process.exitValue(); System.out.printf("result=%d%n", result); } }
実行すると次の内容が出力されます。
実行する外部プログラムを変更してみたり、出力内容を修正したりしていろいろ試してみましょう。
Hello! result=0
監修してくれたメンター
青柳哲夫
独立系SIerやベンチャーを経て、現在はフリーランスエンジニアとして活動しています。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。
JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。
また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。