2009-11-19 25 views
90

J'ai une fonction qui prend un objet d'un certain type, et un PrintStream à imprimer, et affiche une représentation de cet objet. Comment puis-je capturer la sortie de cette fonction dans une chaîne? Plus précisément, je veux l'utiliser comme dans une méthode toString.Java: PrintStream à chaîne?

Répondre

156

Utilisez un ByteArrayOutputStream comme tampon:

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

Voulez-vous réduire le nom de variable 'S' par hasard? Tu me fais mal aux yeux. – Asaph

+2

@ Asaph - n'hésitez pas à les éviter :-) – ChssPly76

+10

N'oubliez pas de fermer le PrintStream pour libérer toutes les ressources. – tobr

22

Vous pouvez construire un PrintStream avec un ByteArrayOutputStream passé dans le constructeur que vous pouvez utiliser plus tard pour saisir le texte écrit à la PrintStream.

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

Définir et initialiser une variable de scanner nommée INSS qui crée un flux de chaîne d'entrée en utilisant la variable chaîne myStrLine .

Ans: Scanner inSS = nouveau scanner (myStrLine);

2

Une unification des réponses précédentes, cette réponse fonctionne avec Java 1.7 et après. De plus, j'ai ajouté du code pour fermer les Streams.

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