2009-06-16 8 views
5

मैं इनपुट फ़ाइल की प्रत्येक पंक्ति के माध्यम से जाने के लिए BufferedReader और PrintWriter का उपयोग कर रहा हूं, कुछ पंक्तियों में बदलाव करता हूं, और परिणाम आउटपुट करता हूं। यदि कोई रेखा किसी बदलाव से गुजरती नहीं है, तो यह केवल आउटपुट फ़ाइल के रूप में मुद्रित होती है। हालांकि किसी कारण से, प्रक्रिया समय-समय पर समाप्त होती है। मेरी इनपुट फ़ाइल के अंत की ओरBufferedReader/PrintWriter के साथ समस्याएं?

BufferedReader in = new BufferedReader(new FileReader("in.txt")); 
FileOutputStream out = new FileOutputStream("out.txt"); 
PrintWriter p = new PrintWriter(out); 
String line = in.readLine(); 

while(line!=null) 
{ 
    if(line is special) 
     do edits and p.println(edited_line); 
    else 
     p.println(line); 

    line = in.readLine(); 
} 

हालांकि, कुछ अजीब कारण के लिए, इस प्रक्रिया को समय से पहले ही समाप्त हो जाती है (वास्तव में एक लाइन का आधा बाहर प्रिंट): कोड कुछ इस तरह लग रहा है। इसके लिए कोई स्पष्ट कारण? जबकि लूप स्पष्ट रूप से एक शून्य से समाप्त हो रहा है। और यह मेरी 250k + लाइन txt फ़ाइल के अंत की ओर है। धन्यवाद!

+0

आप पूरी तरह सुनिश्चित करें कि कोई अपवाद नहीं फेंक दिया जा रहा है कर रहे हैं बंद करने के लिए अपने प्रक्रिया के अंत में out.close() (संभवतः एक p.flush() रूप में अच्छी तरह?) की जरूरत है? अगर अपवाद * फेंक दिया गया तो आप क्या करेंगे? क्या यह लॉग होगा? –

+0

जॉन - यह न भूलें कि प्रिंटवाइटर अपवादों को झुकाता है - आपको यह देखने के लिए "चेकइरर" विधि का उपयोग करना होगा कि कोई हुआ या नहीं। – MetroidFan2002

+0

हां, लेकिन BufferedReader और FileReader नहीं करते हैं - इसलिए पढ़ने के लिए कॉललाइन() फेंक सकता था। –

उत्तर

7

आप अपने प्रिंटवाइटर या फ़ाइलऑटपुटस्ट्रीम को कहां बंद/बंद करते हैं? यदि कार्यक्रम निकलता है और यह नहीं किया जाता है, तो आपके सभी परिणाम लिखे जाएंगे।

आप फ़ाइल उत्पादन धारा

+1

क्लोजिंग बस फ्लशिंग से बेहतर है। +1 –

+1

कोई अपवाद होने पर अंततः ब्लॉक में ऐसा करने के लिए मत भूलना। –

+0

यह पी.क्लोज़() होना चाहिए। पी.फ्लश() * आवश्यक नहीं होना चाहिए, लेकिन यह जानना अच्छा है कि प्रिंटवाइटर अंतर्निहित धारा को बंद करने से पहले फ्लश नहीं करता है। अगर उस स्ट्रीम में एक बग है (-> बंद पर फ्लश नहीं करता है, तो), आपको एक ही समस्या फिर से मिल जाएगी। –

1

लूप के बाद एक p.flush() जोड़ने का प्रयास करें।

1

प्रिंटवाइटर में ऑटोफ्लशिंग सक्षम नहीं है, इसलिए इसकी संभावना है कि फ़ाइल समाप्त होने से पहले फ़ाइल का अंतिम भाग फ़्लश नहीं किया गया है।

p.flush() जोड़कर आपके लूप को चाल चलनी चाहिए।