为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2019-09-21 11:31:40
我有一个函数的返回类型为VOID,它直接在控制台上打印。但是,我需要字符串形式的输出,以便可以对其进行处理。由于我无法使用返回类型为VOID的函数进行任何更改,因此我不得不将该输出重定向到字符串。如何在JAVA中重定向它?关于将stdout重定向到字符串有很多问题,但是它们仅重定向从用户获取的输入,而不重定向某些函数的输出...
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

如果功能正在打印到System.out,则可以使用System.setOut更改System.out为PrintStream您提供的方法来捕获该输出。如果创建PrintStream与的连接ByteArrayOutputStream,则可以将输出捕获为String。


例:


// Create a stream to hold the output

ByteArrayOutputStream baos = new ByteArrayOutputStream();

PrintStream ps = new PrintStream(baos);

// IMPORTANT: Save the old System.out!

PrintStream old = System.out;

// Tell Java to use your special stream

System.setOut(ps);

// Print some output: goes to your special stream

System.out.println("Foofoofoo!");

// Put things back

System.out.flush();

System.setOut(old);

// Show what happened

System.out.println("Here: " + baos.toString());

该程序仅打印一行:


Here: Foofoofoo!


查看完整回答
反对 回复 2019-09-21
?
温温酱

TA贡献1752条经验 获得超4个赞

不要忘记这会造成线程问题,不仅是此方法(您可以通过同步解决此问题),而且还会导致打印到stdout的任何其他代码。baos.toString()可能很容易"Foofohello worldofoo!"

查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信