如何使一个Java程序同时打印out.println()和err.println()语句?

如何使一个Java程序同时打印out.println()和err.println()语句?,第1张

如何使一个Java程序同时打印out.println()和err.println()语句?

首先,启动外部程序的首选方法是通过

ProcessBuilder
。在文档中
Runtime
甚至提到了:

现在,ProcessBuilder.start()是使用修改后的环境启动进程的首选方法。

ProcessBuilder
你有一个非常方便的方法叫做
redirectErrorStream

设置此流程生成器的redirectErrorStream属性。

如果此属性为true,则 随后由该对象的start()方法启动的子流程生成的任何错误输出都将与标准输出合并
,以便可以使用Process.getInputStream()方法读取两者。这使得将错误消息与相应的输出关联起来更加容易。初始值为false。

有关如何输出标准误差和标准输出的完整示例:

import java.io.*;public class Test {    public static void main(String... args) throws IOException {        ProcessBuilder pb =     new ProcessBuilder("java", "-cp", "yourClassPath", "HelloWorld");        pb.redirectErrorStream(true);        Process proc = pb.start();        Reader reader = new InputStreamReader(proc.getInputStream());        int ch;        while ((ch = reader.read()) != -1) System.out.print((char) ch);        reader.close();    }}

对您的更新的回复:不,代码与

while ((c = in1.read()) != -1 || (c = in2.read()) != -1)

将不会起作用,因为这

read()
是一种阻塞方法,并且您只有一个线程。您唯一的选择是每个输入流使用一个线程,或者(最好)使用将两个输入流合并为一个线程
ProcessBuilder.redirectErrorStream



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5488445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存