安価にしようとしてローカルシステムコマンド(uname -a
)Javaで。 uname
からの出力を取得し、文字列に保存することを検討しています。これを行う最善の方法は何ですか?現在のコード:
public class lame {
public static void main(String args[]) {
try {
Process p = Runtime.getRuntime().exec("uname -a");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch(IOException e1) {}
catch(InterruptedException e2) {}
System.out.println("finished.");
}
}
あなたのやり方は、私がおそらくしていることからそう遠くない。
Runtime r = Runtime.getRuntime();
Process p = r.exec("uname -a");
p.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = b.readLine()) != null) {
System.out.println(line);
}
b.close();
もちろん、関心のある例外を処理します。
それが最善の方法です。また、可変引数コンストラクターを持つ ProcessBuilder を使用できるため、1行または2行のコードを保存できます。
あなたがやっていることはうまく見えます。コマンドが単一の文字列のみを返す場合、whileループは不要で、リーダーのread.readLine()値を単一の文字列変数に格納するだけです。
また、それらを単に飲み込むのではなく、おそらくそれらの例外で何かをすべきです。
私はこれが非常に古いことを知っていますが、それでも...
ここで記事を読む: http://www.javaworld.com/article/2071275/core-Java/when-runtime-exec---won-t.html
最初に実行したコマンドの出力ストリームとエラーストリームを読み、次にプロセスの戻り値をwaitFor
読まなければならないことを理解しています。