Java:PrintStreamからString?


115

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

回答:


193

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

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

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final String utf8 = StandardCharsets.UTF_8.name();
    try (PrintStream ps = new PrintStream(baos, true, utf8)) {
        yourFunction(object, ps);
    }
    String data = baos.toString(utf8);

10
すべてのリソースを解放するためにPrintStreamを閉じることを忘れないでください。
tobr

9
PrintStream ps = new PrintStream(baos,true,"utf-8");文字セットの混乱を避けるために使用することをお勧めします
Dr. MaxVölkel'30年

5
1.7new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8);以降で使用できますが、スローされません
イヤーカム

2
@tobr確かに親指の良いルールは、しかし、ByteArrayOutputStream.close()何の効果もありませんガベージコレクタによって対処される補助配列のほかに解放するリソースがないよう、」。
dimo414 2016年

ByteArrayOutputStreamはを持っていますがtoString(String charsetName)、String引数のみを受け入れます。またByteArrayOutputStreamがされていることに注意同期恐らく望ましくないとする、
慌てる必要はありません

31

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

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

5

以前の回答を統合したこの回答は、Java 1.7以降で機能します。また、ストリームを閉じるためのコードを追加しました。

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();


-3

文字列変数myStrLineを使用して入力文字列ストリームを作成するinSSという名前のScanner変数を定義して初期化します。

回答:Scanner inSS = new Scanner(myStrLine);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.