Ich habe eine Funktion, die ein Objekt eines bestimmten Typs und eine PrintStream
zu dem zu drucken, und gibt eine Darstellung des Objekts. Wie kann ich die Ausgabe dieser Funktion in einem String erfassen? Insbesondere möchte ich es wie in einer toString
Methode verwenden.Java: PrintStream zu String?
90
A
Antwort
156
ein ByteArrayOutputStream
als Puffer verwenden:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, "utf-8");
yourFunction(object, ps);
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
ps.close();
22
Sie einen Printstream mit einem ByteArrayOutputStream Konstrukt können in den Konstruktor übergeben, die Sie später den Text verwenden können, um die Print geschrieben zu greifen.
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
1
Vielleicht diese Frage könnte Ihnen helfen: Get an OutputStream into a String
Subklassen-Output und wickeln Sie es in Print
-1
definieren und einen Scanner Variable initialisieren namens INSS, die einen Eingabestring-Stream unter Verwendung der String-Variable myStrLine erstellt .
Antwort: Scanner inSS = neuer Scanner (myStrLine);
2
Eine Vereinheitlichung der vorherigen Antworten, diese Antwort funktioniert mit Java 1.7 und danach. 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();
Möchten Sie den Variablennamen 'S' zufällig senken? Du verletzt meine Augen. – Asaph
@Asaph - zögern Sie nicht, abzuwenden :-) – ChssPly76
Vergessen Sie nicht, den PrintStream zu schließen, um alle Ressourcen freizugeben. – tobr