在Java 5/6中如何重定向ProcessBuilder的输出?

9

我正在寻找一种重定向Process / ProcessBuilder的输出方式。我知道在Java 7中可以这样做:

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectOutput();
Process process = builder.start();

但我需要Java 5/6的相同功能...非常感谢任何帮助。

1个回答

4

针对在Windows 7上使用Java 6cmd进程的示例代码:

ProcessBuilder processBuilder = new ProcessBuilder( "cmd" );        
Process process = processBuilder.start();
OutputStream stream = process.getOutputStream();

getOutputStream()方法的Javadoc说明如下:"获取子进程的输出流。将输出到该流的内容管道传输到由此Process对象表示的进程的标准输入流中。"

如果要重定向进程的输出,可以使用上面代码中定义的stream对象。您可以将其写入控制台等。


1
嘿,deporter,非常感谢您的快速回复。只需使用 process.getInputStream() 并将其放入 InputStreamReader 中即可完美地工作 :-) - salocinx
@NicolasBaumgardt 没问题,欢迎使用。但是在上面的代码中我使用了outputstream,如果你需要inputstream,也没有问题,可以使用它。 :) - Juvanis
4
我的目标是读取我创建的进程的stdout,而Java文档中写道:“该流获取从此Process对象表示的进程的标准输出流管道传输的数据。”在这种情况下,对我来说,这份Java文档有点奇怪。 - salocinx
有点混淆:p.getOutputStream() 返回 p 的标准输入,而 p.getInputStream() 返回 p 的标准输出。请参见 Process - ford
这个答案不完整,因为它没有按照要求重定向输出。它只是获取流引用,以便用户可以自己实现。用户应该启动一个新线程来进行重定向,并在当前线程中继续进行预期的工作。 - Oliver Gondža

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接