2009-11-19 8 views
90

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?

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

Möchten Sie den Variablennamen 'S' zufällig senken? Du verletzt meine Augen. – Asaph

+2

@Asaph - zögern Sie nicht, abzuwenden :-) – ChssPly76

+10

Vergessen Sie nicht, den PrintStream zu schließen, um alle Ressourcen freizugeben. – tobr

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

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