问题

我有一个函数,它接受某种类型的对象,以及要打印的aPrintStream,并输出该对象的表示。如何在String中捕获此函数的输出?具体来说,我想在atoString方法中使用它。


#1 热门回答(169 赞)

使用aByteArrayOutputStream作为缓冲区:

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try (PrintStream ps = new PrintStream(baos, true, "UTF-8")) {
        yourFunction(object, ps);
    }
    String data = new String(baos.toByteArray(), StandardCharsets.UTF_8);

#2 热门回答(26 赞)

你可以使用传递给构造函数的ByteArrayOutputStream构造一个PrintStream,稍后你可以使用它来获取写入PrintStream的文本。

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");

#3 热门回答(2 赞)

以前的答案的统一,这个答案适用于Java 1.7及之后。另外,我添加了代码来关闭Streams。

final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();

原文链接