1. ホーム
  2. java

[解決済み] Java Runtime.getRuntime():コマンドライン・プログラムの実行による出力の取得

2022-04-15 03:52:35

質問

ランタイムを使用して、Javaプログラムからコマンドプロンプトコマンドを実行しています。しかし、コマンドが返す出力を取得する方法について、私は知らない。

以下は私のコードです。

Runtime rt = Runtime.getRuntime();

String[] commands = {"system.exe", "-send" , argument};

Process proc = rt.exec(commands);

をやってみた。 System.out.println(proc); が、何も返ってきません。そのコマンドを実行すると、セミコロンで区切られた2つの数字が返されるはずです。どうすればこれを変数に取り込んでプリントアウトできるのでしょうか?

今使っているコードはこちらです。

String[] commands = {"system.exe", "-get t"};

Process proc = rt.exec(commands);

InputStream stdIn = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdIn);
BufferedReader br = new BufferedReader(isr);

String line = null;
System.out.println("<OUTPUT>");

while ((line = br.readLine()) != null)
     System.out.println(line);

System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);

しかし、出力として何も得られません。しかし、自分でそのコマンドを実行すると、うまくいきます。

どうすればいいですか?

ここでは、その方法を紹介します。

Runtime rt = Runtime.getRuntime();
String[] commands = {"system.exe", "-get t"};
Process proc = rt.exec(commands);

BufferedReader stdInput = new BufferedReader(new 
     InputStreamReader(proc.getInputStream()));

BufferedReader stdError = new BufferedReader(new 
     InputStreamReader(proc.getErrorStream()));

// Read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

// Read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
    System.out.println(s);
}

詳細はJavadocをお読みください ここで . ProcessBuilder を使用すると良いでしょう。