2010-09-15 15 views
8

मेरे कोड को एक फ़ाइल में पढ़ने की जरूरत है। वर्तमान में मैं निम्नलिखित कोड का उपयोग कर रहा:,कैसे देखें कि एक पाठक ईओएफ पर है या नहीं?

BufferedReader r = new BufferedReader(new FileReader(myFile)); 
while (r.ready()) { 
    String s = r.readLine(); 
    // do something with s 
} 
r.close(); 

तो फ़ाइल वर्तमान में खाली है, हालांकि, तो s अशक्त जो अच्छा नहीं है,। क्या कोई Reader है जिसमें atEOF() विधि या समकक्ष है?

उत्तर

1

तुम क्या करने कोशिश कर रहे हैं के लिए एक मानक पैटर्न है:

BufferedReader r = new BufferedReader(new FileReader(myFile)); 
String s = r.readLine(); 
while (s != null) { 
    // do something with s 
    s = r.readLine(); 
} 
r.close(); 
+4

तैयार() विधि केवल देख सकते हैं कि अगले पढ़ने रोकेंगे। अगर पाठक ईओएफ पर है तो अगली कॉल ब्लॉक नहीं होगी; यह तुरंत एक ईओएफ संकेत (रीडलाइन के लिए शून्य, पढ़ने के लिए -1) के साथ वापस आ जाएगा। –

+1

यहां तक ​​कि बेहतर: थोड़ी देर के बजाय करते समय। –

+0

'BufferedReader.readLine()' का जावाडॉक कहता है कि यह "स्ट्रिंग का अंत होता है ... या स्ट्रीम ** यदि स्ट्रीम का अंत तक पहुंच गया है ** ** – Raedwald

0

तैयार() विधि काम नहीं करेगा। आपको स्ट्रीम से पढ़ना होगा और यह देखने के लिए रिटर्न वैल्यू की जांच करनी होगी कि आप ईओएफ में हैं या नहीं।

+0

ठीक है, यह * कई मामलों में * काम करेगा, लेकिन यह इस प्रश्न का उत्तर देने के लिए आवश्यक नहीं होगा। – EJP

3

docs कहते हैं:

public int read() throws IOException
रिटर्न: चरित्र श्रेणी में एक पूर्णांक के रूप में, पढ़ने के लिए 0 करने के लिए 65535 (0x00-0xffff), या -1 धारा के अंत नहीं है, तो पहुंचा गया

तो एक रीडर के मामले में एक की तरह

// Reader r = ...; 
int c; 
while (-1 != (c=r.read()) { 
    // use c 
} 

EOF के खिलाफ जांच होनी चाहिए एक BufferedReader और ReadLine() के मामले में, यह हो सकता है

String s; 
while (null != (s=br.readLine())) { 
    // use s 
} 

क्योंकि ReadLine() ईओएफ पर शून्य वापस आती है।

0

उपयोग इस समारोह:

public static boolean eof(Reader r) throws IOException { 
    r.mark(1); 
    int i = r.read(); 
    r.reset(); 
    return i < 0; 
} 
+0

* यदि और केवल तभी * 'रीडर'' चिह्न() 'और' रीसेट() 'का समर्थन करता है। – EJP

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