Java Process getOutputStream to String

时间:2015-09-16 15:21:45

标签: java stdout outputstream

Java 8在这里。如何将Process#getOutputStream()中的数据读入字符串?我试图从Java内部运行一个进程并挂钩/捕获它的STDOUT。

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("consul -v");
String capturedOutput;

OutputStream os = proc.getOutputStream();
capturedOutput = howDoIConvert(os);  // <---- ???

在这里寻找确切的代码(不是像baos.toString(codepage)那样模糊的东西。如果我需要close()礼貌地感兴趣,也感兴趣。

2 个答案:

答案 0 :(得分:8)

您从inputStream读取数据而不是从outputStream读取数据。

OutputStream用于将数据传递给进程。

Process有两个基本输入流。一个是标准输入,可以使用getInputStream()检索,另一个是错误,可以使用getErrorStream()检索

来自getInputStream()的javadoc:

  

返回连接到正常输出的输入流   子

getErrorStream()

  

返回连接到错误输出的输入流   子进程。

关于流的注意事项:从java程序的角度来看,Process外部程序。当您需要向外部程序添加一些输入时,您将从java编写到该程序(因此java程序的输出是Process的输入)。相反,如果外部程序写入您读取的内容(因此Process的输出是java程序的输入)。

Java                   Data direction   External Process
_____________________________________________________________

write to OutputStream  ------------>    read from InputStream
read from InputStream  <------------    write to OutputStream

答案 1 :(得分:0)

这里有很多例子:Read/convert an InputStream to a String但它们可能不是特定于Java 8的。