JavaのProcessBuilderを使ってバッチファイルを実行する方法【初心者向け】

初心者向けにProcessBuilderを使う方法について解説しています。ProcessBuilderを使うと外部プログラムを実行することができます。実行の流れと基本の書き方について、サンプルプログラムを見ながら学習しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

ProcessBuilderを使う方法について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

ProcessBuilderを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

ProcessBuilderとは

「ProcessBuilder」とは、Javaから外部プログラムを実行するために使用するクラスです。

外部プログラムは、例えばWindowsであれば拡張子.bat、.cmdなどのバッチプログラム、MacやLinuxなどであればシェルスクリプトなどのことを指しています。

旧バージョンのJava(〜JDK1.4)では「Runtime」というクラスがその役割を担っていましたが、現在はそれより新しいクラスである「ProcessBuilder」を使うのがよりよい作法とされています。

 

JavaのProcessBuilderを使ってバッチファイルを実行する方法

「ProcessBuilder」を使って外部プログラムを実行するには、次の手順で行います。

  1. 実行する外部プログラムを指定してProcessBuilderインスタンスを生成する
  2. プロセスを開始する
  3. 結果を受け取る

サンプルプログラムで、上記の手順に対応するコードを確認してみましょう。

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

 

[PR] Javaで挫折しない学習方法を動画で公開中

監修してくれたメンター

青柳哲夫

独立系SIerやベンチャーを経て、現在はフリーランスエンジニアとして活動しています。
PHPやJava・Rubyでの業務系Webアプリケーション開発が得意です。
TechAcademyではJavaコース・ブロックチェーンコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。