2009-11-19 25 views
90

Tengo una función que toma un objeto de un tipo determinado, y un PrintStream al cual imprimir, y muestra una representación de ese objeto. ¿Cómo puedo capturar la salida de esta función en una cadena? Específicamente, quiero usarlo como en un método toString.Java: PrintStream a String?

Respuesta

156

Utilice un ByteArrayOutputStream como un amortiguador:

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

Wanna lower¿Por casualidad, tienes ese nombre de variable 'S'? Estás lastimando mis ojos. – Asaph

+2

@Asaph: siéntete libre de evitarlos :-) – ChssPly76

+10

No olvides cerrar el PrintStream para liberar todos los recursos. – tobr

22

Usted puede construir una PrintStream con un ByteArrayOutputStream pasado al constructor que se puede utilizar más adelante para agarrar el texto escrito a la PrintStream.

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

Definir e inicializar una variable de escáner llamado INSS que crea un flujo de cadena de entrada utilizando la variable de cadena myStrLine .

Resp .: Escáner inSS = new Scanner (myStrLine);

2

Una unificación de respuestas anteriores, esta respuesta funciona con Java 1.7 y posteriores. Además, agregué código para cerrar las transmisiones.

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