web-dev-qa-db-ja.com

Java:PrintStream to String?

特定のタイプのオブジェクトと、印刷先のPrintStreamを受け取り、そのオブジェクトの表現を出力する関数があります。この関数の出力を文字列でキャプチャするにはどうすればよいですか?具体的には、toStringメソッドのように使用します。

108
Nick Heiner

ByteArrayOutputStream をバッファーとして使用します。

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);
178
ChssPly76

コンストラクターに渡されたByteArrayOutputStreamを使用してPrintStreamを構築できます。コンストラクターは、後でPrintStreamに書き込まれたテキストを取得するために使用できます。

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

以前の回答を統合したもので、この回答は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();
4
Kaelan Dawnstar

たぶん、この質問はあなたを助けるかもしれません: 文字列にOutputStreamを取得

OutputStreamをサブクラス化し、PrintStreamでラップします

1
Kamil Szot