Java生成新cmd.exe并获取输出流

Java生成新cmd.exe并获取输出流,java,process,console,Java,Process,Console,我正在尝试用java生成一个新的控制台,并获取输出流 我这样试过: Process p = Runtime.getRuntime().exec("cmd.exe /c start"); BufferedWriter out = new BufferedWriter( new OutputStreamWriter( p.getOutputStream())); Process p = Runtime.getRunt

我正在尝试用java生成一个新的控制台,并获取输出流

我这样试过:

Process p = Runtime.getRuntime().exec("cmd.exe /c start");
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(
                                         p.getOutputStream()));
Process p = Runtime.getRuntime().exec("cmd.exe");
  BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
               p.getOutputStream()));
控制台生成,但我不能在流上写东西

另一种方式:

Process p = Runtime.getRuntime().exec("cmd.exe /c start");
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(
                                         p.getOutputStream()));
Process p = Runtime.getRuntime().exec("cmd.exe");
  BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
               p.getOutputStream()));
这一次我可以写入流,但是控制台没有生成

我缺乏知识:/


先谢谢你

您第一次启动cmd时,它启动了另一个您无法访问的进程。如果您需要输入/输出流,请不要使用这种方式

另一种方法是正确的。进程运行正常。但你没有提供任何信息。获取输入流并发送一些命令,如“cd foo\n”、“dir\n”。如您所见,这是一个常规流,因此需要执行该命令。然后您也可以使用输出流


有很多方法可以做到这一点。

我不是控制台专家。然而,从实验中我可以看出,当第一个示例第一行运行时,cmd打开并等待系统命令。由于编写器依赖于在特定输出区域上运行的java虚拟机,我认为您根本无法输出到新的cmd,因为它没有运行任何形式的虚拟机。如果您想打开一个cmd窗口,它只是原始窗口的一个扩展(不显示Windows版本或任何东西,只是一个黑屏),这可能是一个解决方案……如果您从
cmd
(.bat)以另一种方式运行,感觉会有非常微妙的区别。什么能证明这样的努力是合理的(我想,也没有进一步的参考,只是我的前评论员:不可能得到那个结果是痛苦的)。。。用“这条路”。