Java 拦截和解析记录器或控制台输出而不干扰它
我在Java方面遇到了一些问题。我想要的很简单, 我正在为著名游戏Minecraft的一个mod开发一个插件,我需要能够解析到STOUT的每一行控制台输出 我在网上到处找了找,但似乎找不到任何可以用来做这件事的东西。我知道一些控制台输出是通过默认的记录器进行的,一些是通过system.out进行的。我有一个函数,Java 拦截和解析记录器或控制台输出而不干扰它,java,intercept,system.out,Java,Intercept,System.out,我在Java方面遇到了一些问题。我想要的很简单, 我正在为著名游戏Minecraft的一个mod开发一个插件,我需要能够解析到STOUT的每一行控制台输出 我在网上到处找了找,但似乎找不到任何可以用来做这件事的东西。我知道一些控制台输出是通过默认的记录器进行的,一些是通过system.out进行的。我有一个函数,parseConsole(stringline),它将解析该行,并在它包含单词时执行某些操作,等等。我希望对控制台上显示的每一行输出调用该函数,但它不能中断流,在我的函数解析后,每一行仍
parseConsole(stringline)
,它将解析该行,并在它包含单词时执行某些操作,等等。我希望对控制台上显示的每一行输出调用该函数,但它不能中断流,在我的函数解析后,每一行仍将发送到控制台。您可以使用替换控制台打印流。您可以将其替换为在文本到达控制台的过程中检查文本的实现
下面是一个如何筛选的示例:
public class MyFilterPrintStream extends PrintStream {
@Override public void print(String s) {
// ... process output string here ...
// pass along to actual console output
super.print(s);
}
}
// install my filter
System.setOut(new MyFilterPrintStream(System.out));
见此[1]。基本上你想要一个T恤。[1] :谢谢你的回答。我想这可能与此有关。我知道我可以将其分配给ByteArrayOutputStream,但我不知道如何让插件在每次将一行输出到控制台时读取流。你能给我举个简单的例子吗?我是否必须循环流,直到它有东西在里面,然后在完成后清除它?那我怎么把线分开呢?用“\n”吗?我已经研究过了,但是我找不到任何可靠的东西。非常感谢。