在java中获取命令输出的最简单方法

时间:2015-06-26 13:07:25

标签: java linux output bufferedreader

我知道您可以使用以下命令在java中运行linux命令并从您刚刚运行的命令中获取输出。

Process p = Runtime.getRuntime().exec("host -t a " + domain);
p.waitFor();
StringBuffer sb = new StringBuffer();
BufferedReader reader = 
     new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = "";           
while ((line = reader.readLine())!= null) {
sb.append(line + "\n");
}

我想知道,有没有更简单的方法从运行的命令获取输出?

1 个答案:

答案 0 :(得分:1)

这是我使用的代码。它

  • 结合了错误和输出,所以如果你收到错误,你仍然会看到它。
  • 在生成数据时读取数据,因此缓冲区不会填满。
  • 不会删除新行,只是将其添加回来。

private static String run(String... cmds) throws IOException {
    ProcessBuilder pb = new ProcessBuilder(cmds);
    pb.redirectErrorStream(true);
    Process process = pb.start();
    StringWriter sw = new StringWriter();
    char[] chars = new char[1024];
    try (Reader r = new InputStreamReader(process.getInputStream())) {
        for (int len; (len = r.read(chars)) > 0; ) {
            sw.write(chars, 0, len);
        }
    }
    return sw.toString();
}