【发布时间】:2021-11-15 18:45:16
【问题描述】:
我想启动一个新线程来处理标准输出,并检查每一行是否包含字符串Success!。这就是我所拥有的:
final Thread ioThread = new Thread(() -> {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.out));
String line;
while ((line = reader.readLine()) != null) {
if (line.contains("Success!")) {
// FOUND LINE!!
}
}
reader.close();
} catch (final Exception e) {
e.printStackTrace();
}
});
ioThread.start();
问题在于InputStreamReader 构造函数需要InputStream,而不是PrintStream。我该如何解决这个问题?
【问题讨论】:
-
一个 PrintStream 用于输出
-
可能有比程序尝试解析自己的标准输出更好的方法来发现某事已成功完成。虽然现在我只能建议你用你自己的实现替换 out 尝试解析通过它写入的所有内容,除此之外将所有字节路由到默认输出流。
-
#1 你的应用是rest api还是桌面应用? #2 你想听你的应用程序的所有标准输出(System.out.println("hello"))吗?通常我们需要另一个进程的标准输出,而不是应用程序本身
-
将 System.out 更改为
System.in。您无法从 OutputStream 中读取数据。