Java: PrintStream zu String?


115

Ich habe eine Funktion, die ein Objekt eines bestimmten Typs und ein PrintStreamzu druckendes Objekt verwendet und eine Darstellung dieses Objekts ausgibt. Wie kann ich die Ausgabe dieser Funktion in einem String erfassen? Insbesondere möchte ich es wie in einer toStringMethode verwenden.

Antworten:


193

Verwenden Sie a ByteArrayOutputStreamals Puffer:

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
Vergessen Sie nicht, den PrintStream zu schließen, um alle Ressourcen freizugeben.
20.

9
Ich würde vorschlagen, zu verwenden PrintStream ps = new PrintStream(baos,true,"utf-8");, um Zeichensatz-Chaos zu vermeiden
Dr. Max Völkel

5
Verwendung new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8);seit 1.7 verfügbar , es wirft nicht
earcam

2
@tobr ist sicherlich eine gute Faustregel, aber ByteArrayOutputStream.close()" hat keine Auswirkung ", da außer dem Backing-Array, das vom Garbage Collector behandelt wird, keine Ressourcen frei sind.
dimo414

ByteArrayOutputStreamhat toString(String charsetName), aber nur String-Argument akzeptieren. Beachten Sie auch, dass ByteArrayOutputStream synchronisiert ist , was wahrscheinlich nicht wünschenswert ist
keine Panik

31

Sie können einen PrintStream mit einem an den Konstruktor übergebenen ByteArrayOutputStream erstellen, mit dem Sie später den in den PrintStream geschriebenen Text abrufen können.

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

5

Diese Antwort ist eine Vereinheitlichung früherer Antworten und funktioniert mit Java 1.7 und höher. Außerdem habe ich Code hinzugefügt, um die Streams zu schließen.

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

Definieren und initialisieren Sie eine Scannervariable mit dem Namen inSS, die mithilfe der String-Variablen myStrLine einen Eingabe-String-Stream erstellt.

Antwort: Scanner inSS = neuer Scanner (myStrLine);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.