2009-11-19 7 views
90

Ho una funzione che accetta un oggetto di un certo tipo e un PrintStream a cui stampare e genera una rappresentazione di tale oggetto. Come posso acquisire l'output di questa funzione in una stringa? Nello specifico, voglio usarlo come in un metodo toString.Java: PrintStream in stringa?

risposta

156

Utilizzare un ByteArrayOutputStream come un buffer:

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

Vuoi abbassare il nome di variabile 'S' per caso? Mi stai facendo male agli occhi. – Asaph

+2

@Asaph - sentiti libero di evitarli :-) – ChssPly76

+10

Non dimenticare di chiudere PrintStream per liberare tutte le risorse. – tobr

22

è possibile costruire un PrintStream con una ByteArrayOutputStream passato al costruttore che potrete poi utilizzare per afferrare il testo scritto al PrintStream.

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

definire e inizializzare una variabile scanner denominata INSS che crea un flusso di stringa di input utilizzando il myStrLine variabile String .

Ans: Scanner inSS = new Scanner (myStrLine);

2

A unificazione di risposte precedenti, questa risposta funziona con Java 1.7 e successivi. Inoltre, ho aggiunto il codice per chiudere gli stream.

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