2012-02-08 2 views
19

मैं String (लंबा लेकिन लपेटा हुआ) लिखने की कोशिश कर रहा हूं, जो JTextArea से है। जब स्ट्रिंग को कंसोल पर मुद्रित किया जाता है, तो स्वरूपण Text Area में होता है, लेकिन जब मैं उन्हें बुफर्डवाइटर का उपयोग करके फ़ाइल में लिखता हूं, तो यह String एकल पंक्ति में लिख रहा है।फ़ाइल में लिखे गए स्ट्रिंग्स लाइन ब्रेक को सुरक्षित नहीं करते हैं

निम्नलिखित स्निपेट यह पुन: पेश कर सकते हैं:

public class BufferedWriterTest { 
    public static void main(String[] args) throws IOException { 
     String string = "This is lengthy string that contains many words. So\nI am wrapping it."; 
     System.out.println(string); 
     File file = new File("C:/Users/User/Desktop/text.txt"); 
     FileWriter fileWriter = new FileWriter(file); 
     BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 
     bufferedWriter.write(string); 
     bufferedWriter.close(); 
    } 
} 

क्या गड़बड़ी हुई? इसे कैसे हल करें? किसी भी मदद के लिए धन्यवाद!

+0

अपने कंसोल के आकार और आपके JTeaxtArea ही के आकार के थे:

इस संबंधित सवाल देखते हैं? – MozenRath

+2

यदि नहीं, तो शायद इसकी वजह है क्योंकि आपको विंडोज़ नई लाइन – MozenRath

+0

ग्रहण कंसोल और JTextArea 750x400 px के लिए \ r \ n की आवश्यकता है। अगर मुझे \ r \ n जोड़ना है, तो मैं JTextArea से इनपुट के लिए कैसे करूं? लाइन ब्रेक की पहचान करना संभव है? – Ahamed

उत्तर

18

पाठ नई-पंक्तियों के लिए \n पात्रों होगा, की परवाह किए बिना चाहते हैं मंच पर चल रहा है। जब आप इसे फ़ाइल में लिखते हैं तो आप उन पात्रों को प्लेटफ़ॉर्म-विशिष्ट न्यूलाइन के साथ प्रतिस्थापित करना चाहते हैं (विंडोज़ के लिए, यह \r\n है, जैसा कि अन्य ने उल्लेख किया है)।

मुझे लगता है कि टेक्स्ट को BufferedReader में लपेटना सबसे अच्छा तरीका है, जिसका उपयोग लाइनों पर फिर से चलाने के लिए किया जा सकता है, और उसके बाद प्लेटफार्म-विशिष्ट न्यूलाइन का उपयोग करके फ़ाइल में प्रत्येक पंक्ति को लिखने के लिए PrintWriter का उपयोग करें । string.replace(...) (अनबेली द्वारा टिप्पणी देखें) में एक छोटा सा समाधान है, लेकिन यह धीमा है और अधिक स्मृति की आवश्यकता है।

यहाँ मेरी समाधान है - अब जावा 8 में नई सुविधाओं के लिए भी सरल धन्यवाद किया:

public static void main(String[] args) throws IOException { 
    String string = "This is lengthy string that contains many words. So\nI am wrapping it."; 
    System.out.println(string); 
    File file = new File("C:/Users/User/Desktop/text.txt"); 

    writeToFile(string, file); 
} 

private static void writeToFile(String string, File file) throws IOException { 
    try (
     BufferedReader reader = new BufferedReader(new StringReader(string)); 
     PrintWriter writer = new PrintWriter(new FileWriter(file)); 
    ) { 
     reader.lines().forEach(line -> writer.println(line)); 
    } 
} 
+2

उहम, इन सभी पाठकों को सरल प्रतिस्थापन करने के लिए ढेर कर रहा है? 'String.replace (" \\ n ", System.getProperty (" line.separator "));' – unbeli

+0

@unbeli, स्ट्रिंग कम है, स्ट्रिंग कम है, बहुत लंबी तारों के लिए, उपर्युक्त दृष्टिकोण अच्छा रहता है। मैंने इसका परीक्षण किया है। – Ahamed

+1

@unbeli - 'String.replace() 'को एक नई वस्तु बनाने की आवश्यकता है, जो अस्थायी रूप से स्मृति आवश्यकता को दोगुना करता है, इसलिए यह बड़ी मात्रा में डेटा के लिए आदर्श नहीं है। हालांकि, 'JTextArea' से आने वाले डेटा के साथ, मैं कल्पना नहीं कर सकता कि स्ट्रिंग बहुत बड़ी होगी, इसलिए यह शायद अधिकांश भाग के लिए भी काम करेगी –

3

मैंने आपकी नई लाइन (\n) से पहले आपके प्रोग्राम को चलाया और एक कैरिज रिटर्न (\r) जोड़ना शुरू कर दिया।

आप एक प्रणाली स्वतंत्र लाइन विभाजक प्राप्त करना चाहते हैं, एक प्रणाली प्रॉपर्टी line.separator

String separator = System.getProperty("line.separator"); 
String string = "This is lengthy string that contains many words. So" + separator 
      + "I am wrapping it."; 
+0

मुझे JTextArea से स्ट्रिंग मिल रही है, क्या मुझे लाइन ब्रेक मैन्युअल रूप से पहचानना है और 'line.separator' डालना है? क्या यह एकमात्र तरीका है? :( – Ahamed

+0

इससे बेहतर तरीके हो सकते हैं, लेकिन ऐसा लगता है कि समाधान आपके लिए काम करेगा। –

6

कृपया उचित रूप से नई-पंक्तियों को संभालने के लिए पर निम्नलिखित प्रश्न देखने में पाया जा सकता।

How do I get a platform-dependent new line character?

मूल रूप से आप

String newLineChar = System.getProperty("line.separator"); 

उपयोग करने के लिए और उसके बाद के बजाय newLineChar का उपयोग करें "\ n" एक JTextArea से

0

आप एक BufferedWriter का उपयोग कर रहे हैं, तो आप भी के आधार पर न्यू लाइन को फिर से जोड़ने के लिए .newline() विधि इस्तेमाल कर सकते हैं आपका मंच Strings written to file do not preserve line breaks

संबंधित मुद्दे