icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

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

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

お願いします!

目次

1時間でできる無料体験!

ProcessBuilderとは

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

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

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

 

[PR] Javaプログラミングで挫折しない学習方法を動画で公開中

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

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

  1. 実行する外部プログラムを指定してProcessBuilderインスタンスを生成する
    ProceddBuilderインスタンスを作成するには以下のように記述します

    ProcessBuilder ProcessBuilderの変数 = new ProcessBuilder(String... command);

    ProcessBuilderに渡す引数には起動するプログラム名とプログラムに渡す引数を設定してあげます。

  2. プロセスを開始する
    1でProcessBuilderインスタンスが作成できたら次はプロセスを開始していきます。
    開始するには以下のように記述します。

    Process Processの変数 = ProcessBuilderの変数.start();

    1で設定したプログラムを起動し、そこに1で設定した引数を渡してあげます。

  3. 結果を受け取る

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

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

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

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

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する