将控制台输出重定向到Java中的字符串

我有一个函数的返回类型为VOID,它直接在控制台上打印。

但是,我需要字符串形式的输出,以便可以对其进行处理。

由于我无法使用返回类型为VOID的函数进行任何更改,因此我不得不将该输出重定向到字符串。

如何在JAVA中重定向它?

关于将stdout重定向到字符串有很多问题,但是它们仅重定向从用户获取的输入,而不重定向某些函数的输出...


当年话下
浏览 849回答 3
3回答

扬帆大鱼

如果功能正在打印到System.out,则可以使用System.setOut更改System.out为PrintStream您提供的方法来捕获该输出。如果创建PrintStream与的连接ByteArrayOutputStream,则可以将输出捕获为String。例:// Create a stream to hold the outputByteArrayOutputStream baos = new ByteArrayOutputStream();PrintStream ps = new PrintStream(baos);// IMPORTANT: Save the old System.out!PrintStream old = System.out;// Tell Java to use your special streamSystem.setOut(ps);// Print some output: goes to your special streamSystem.out.println("Foofoofoo!");// Put things backSystem.out.flush();System.setOut(old);// Show what happenedSystem.out.println("Here: " + baos.toString());该程序仅打印一行:Here: Foofoofoo!

温温酱

不要忘记这会造成线程问题,不仅是此方法(您可以通过同步解决此问题),而且还会导致打印到stdout的任何其他代码。baos.toString()可能很容易"Foofohello worldofoo!"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java