读取输出流的内容

时间:2011-11-25 07:32:47

标签: java bufferedreader

我在java中使用以下代码在命令提示符中调用date命令:

// prepare command prompt runtime and process
Runtime runtime = null;
Process process = null;

// prepare output stream
OutputStream outputStream = null;

try {
   runtime = Runtime.getRuntime(); // instantiate runtime object
   process = runtime.exec("date"); // get the current date in command prompt

   // read the output of executing date command
   outputStream = process.getOutputStream();

   // output the date response
   System.out.println(outputStream);

   process.waitFor(); // wait for the date command to finish
} catch(Exception e) {
  e.printStackTrace();
} // end catch

如何为我读取outputStream值以便能够使用System.output.println()

2 个答案:

答案 0 :(得分:2)

您没有读取输出流,而是写入它以将数据传递给进程。从流程使用中读取数据

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
br.readLine();

代码用于进程的字符串输出。当然,如果您的进程以其他方式输出数据,则必须更改process.getInputStream()

周围的包装器

更新:我认为我们使用getInputStream来实际读取流程输出,这在某种程度上令人困惑:)原因是最初的基本类OutputStream和{{相对于使用它们的代码(你编写的代码),命名是如此。因此,当您使用InputStream时,您实际上将其用作您的计划的输出。当您使用OutputStream时,您无法获得流程'输出但是获取您的程序输出,该输出通过管道传输来处理输入。当您使用process.getOutputStream时,您会获得程序的输入,该程序将获取从流程管道传输的数据。输出

答案 1 :(得分:0)

你可以这样做而不使用OutputStream对象

Process p = Runtime.getRuntime().exec("date");  
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));  
StringBuffer sb = new StringBuffer();  
String line;  
while ((line = br.readLine()) != null) {  
  sb.append(line).append("\n");  
}  
String answer = sb.toString(); 
System.out.println(answer);