如何将OutputStream和InputStream导入控制台?

4
在运行一个进程时,我该如何将它的输出导向System.out,并将它的输入重定向到System.in
Process p = Runtime.getRuntime().exec("cubc.exe");
// do something with p.getOutputStream())

编辑:我觉得我解释错了;我不想输入程序,我想让用户输入程序,并且我不想读取输出,我想让用户读取输出。

3个回答

10

使用IOUtils类,它来自于ApacheCommons IO库:

Process p = Runtime.getRuntime().exec("cubc.exe");
IOUtils.copy(p.getInputStream(), System.out);

我觉得我解释错了;我不想输入到程序中,我希望用户输入到程序中,并且我不想读取输出,我希望用户读取输出。 - personak
2
@personak 这个可以满足你的需求。Process 方法的命名有点令人困惑:getInputStream() 获取的是包含进程输出的输入流,这就是在此转发到 System.out 的内容,也是你所需要的。 - trutheality
我明白了 - 那样更有意义。 - personak

2

您可以按以下方式获取输入:

Scanner scan = new Scanner(p.getInputStream());

关于输出流,您可以以同样的方式获取它,并使用System.out.*方法进行打印:

OutputStream os = p.getOutputStream();

1
请问给我点踩的人,能否解释一下原因,这样我就可以纠正我的错误了。 - MByD

-3

你不能直接使用Java来做到这一点。不过,你可以创建进程并使用PipedOutputStream来捕获输出,然后将其写入System.out.println。除此之外,我认为没有其他方法了。


3
我认为System.Console.WriteLine是C#语言。 - MByD
这是Java中的System.out.println - MByD

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