栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使一个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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号