2009-11-19 22 views
90

Mam funkcję, która pobiera obiekt określonego typu, i PrintStream do drukowania i wyprowadza reprezentację tego obiektu. Jak mogę przechwycić dane wyjściowe tej funkcji w łańcuchu? W szczególności chcę go używać tak, jak w metodzie toString.Java: PrintStream to String?

Odpowiedz

156

Użyj ByteArrayOutputStream jako bufor:

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

Chcesz obniżyćCzy tę nazwę zmiennej "S" przypadkiem? Ranisz moje oczy. – Asaph

+2

@Asaph - zachęcamy do ich odwrócenia :-) – ChssPly76

+10

Nie zapomnij zamknąć PrintStream, aby zwolnić wszystkie zasoby. – tobr

22

Można skonstruować PrintStream z ByteArrayOutputStream przekazany do konstruktora, który można później wykorzystać do chwyć tekst napisany na PrintStream.

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

Definiowanie i zainicjować zmienną Scanner nazwie INSS że wytwarza strumień ciąg wejściowy z wykorzystaniem String zmiennej myStrLine .

Odp .: Skaner inSS = nowy skaner (myStrLine);

2

Ujednolicenie poprzednich odpowiedzi, ta odpowiedź działa z językiem Java 1.7 i późniejszym. Dodałem też kod do zamykania strumieni.

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