2009-11-19 9 views
90

मेरे पास एक ऐसा फ़ंक्शन है जो एक निश्चित प्रकार का ऑब्जेक्ट लेता है, और PrintStream प्रिंट करने के लिए, और उस ऑब्जेक्ट के प्रतिनिधित्व को आउटपुट करता है। मैं स्ट्रिंग में इस फ़ंक्शन के आउटपुट को कैप्चर कैसे कर सकता हूं? विशेष रूप से, मैं इसे toString विधि में उपयोग करना चाहता हूं।जावा: स्ट्रिंग के लिए प्रिंटस्ट्रीम?

उत्तर

156

एक बफर के रूप में एक ByteArrayOutputStream का उपयोग करें:

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

किसी भी मौके से उस परिवर्तनीय नाम 'एस' को कम करना चाहते हैं? तुम मेरी आंखें चोट लगी हो – Asaph

+2

@Asaph - उन्हें रोकने के लिए स्वतंत्र महसूस करें :-) – ChssPly76

+10

सभी संसाधनों को मुक्त करने के लिए प्रिंटस्ट्रीम को बंद करना न भूलें। ' चारसेट अराजकता – tobr

22

आप एक ByteArrayOutputStream निर्माता जो आपको बाद में पाठ PrintStream को पत्र लिखा हड़पने के लिए उपयोग कर सकते हैं में पारित कर दिया के साथ एक PrintStream निर्माण कर सकते हैं।

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

हो सकता है कि इस सवाल का आप मदद कर सकते हैं: Get an OutputStream into a String

उपवर्ग OutputStream और PrintStream

में लपेट
-1

परिभाषित करें और एक स्कैनर चर INSS नामित कि स्ट्रिंग वैरिएबल myStrLine का उपयोग कर एक इनपुट स्ट्रिंग स्ट्रीम बनाता प्रारंभ ।

उत्तर: स्कैनर INSS = नया स्कैनर (myStrLine);

2

पिछले उत्तरों का एकीकरण, यह उत्तर जावा 1.7 और बाद के संस्करण के साथ काम करता है। इसके अलावा, मैंने स्ट्रीम को बंद करने के लिए कोड जोड़ा।

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(); 
संबंधित मुद्दे