在 Java 中捕获标准输出的内容

2022-09-02 20:02:15

我正在调用一个函数,该函数正在我的控制台/标准输出中打印一些字符串。我需要捕获此字符串。我无法修改执行打印的函数,也无法通过继承更改运行时行为。我无法找到任何允许我执行此操作的预定义方法。

JVM 是否存储打印内容的缓冲区?

有谁知道Java方法可以帮助我吗?


答案 1

您可以通过调用来重定向标准输出

System.setOut(myPrintStream);

或者 - 如果您需要在运行时记录它,请将输出通过管道传输到文件:

java MyApplication > log.txt

另一个技巧 - 如果你想重定向并且无法更改代码:实现一个快速包装器,调用你的应用程序并启动该应用程序:

public class RedirectingStarter {
  public static void main(String[] args) {
    System.setOut(new PrintStream(new File("log.txt")));
    com.example.MyApplication.main(args);
  }
}

答案 2

您可以暂时将 System.err 或 System.out 替换为写入字符串缓冲区的流。


推荐