如何使用Java执行系统命令(linux / bsd)

我试图成本低廉,并在Java中执行本地系统命令( uname -a )。 我正在寻找uname的输出,并将其存储在一个string。 这样做的最好方法是什么? 当前代码:

 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 ,这样可以保存一行或两行代码

你在做什么看起来不错。 如果您的命令只返回一个string,则不需要while循环,只需将reader.readLine()值存储在一个Stringvariables中即可。

另外,你可能应该对这些例外做些什么,而不是只是吞下它们。

我知道这是非常古老的,但仍然…

阅读这篇文章: http : //www.javaworld.com/article/2071275/core-java/when-runtime-exec—won-t.html
这是我的理解,你应该先读取执行命令的输出和错误stream,然后waitFor返回值的过程。