ProcessBuilder重定向到标准输出

我想将java进程输出重定向到父java进程的标准输出。

使用ProcessBuilder类如下:

public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder("cmd"); processBuilder.directory(new File("C:")); processBuilder.redirectErrorStream(true); // redirect error stream to output stream processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); } 

我原以为“cmd”的输出,如:

Microsoft Windows [版本6.1.7601]版权所有(c)2009 Microsoft Corporation。 Tousdroitsréservés。

显示在用于运行java程序的DOS控制台中。 但是在DOS控制台中根本没有显示任何内容。

在讨论的其他主题中,我看到了使用BufferedReader类的解决方案:但是在这里我希望过程的输出直接显示在标准输出中,而不使用任何BufferedReader或“while read loop”。 可能吗?

谢谢。

尝试使用ProcessBuilder.inheritIO()来使用与当前Java进程相同的I / O. 另外,你可以菊花链方式:

 ProcessBuilder pb = new ProcessBuilder("cmd") .inheritIO() .directory(new File("C:")); pb.start(); 

你确实错过了一个关键部分,你实际上需要开始你的过程并等待你的输出。 我相信这会奏效,

 processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); // Start the process. try { Process p = processBuilder.start(); // wait for termination. p.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }