2009-11-19 27 views
90

Tôi có một chức năng lấy đối tượng thuộc một loại nhất định và PrintStream để in và xuất kết quả của đối tượng đó. Làm thế nào tôi có thể nắm bắt đầu ra của hàm này trong một String? Cụ thể, tôi muốn sử dụng nó như trong phương thức toString.Java: PrintStream to String?

Trả lời

156

Sử dụng một ByteArrayOutputStream như một bộ đệm:

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

Muốn hạ thấpTên biến đó 'S' bằng bất kỳ cơ hội nào? Bạn đang làm tổn thương đôi mắt của tôi. – Asaph

+2

@Asaph - cảm thấy tự do để ngăn chặn chúng :-) – ChssPly76

+10

Đừng quên đóng PrintStream để giải phóng tất cả các tài nguyên. – tobr

22

Bạn có thể xây dựng một PrintStream với một ByteArrayOutputStream chuyển vào constructor mà bạn sau này có thể sử dụng để lấy các văn bản bằng văn bản cho PrintStream.

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

Xác định và khởi tạo một biến Scanner tên inSS tạo ra một dòng chuỗi đầu vào bằng cách sử dụng biến String myStrLine .

Ans: Máy quét inSS = new Scanner (myStrLine);

2

Một sự thống nhất các câu trả lời trước, câu trả lời này hoạt động với Java 1.7 và sau đó. Ngoài ra, tôi đã thêm mã để đóng Luồng.

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