2010-09-15 16 views
8

Kodumun bir dosyada okuması gerekiyor. Şu anda aşağıdaki kodu kullanıyorum: Dosya şu anda boş ise,Okuyucunun EOF'ta olup olmadığını nasıl görebilirsiniz?

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

olsa, o zaman s iyi olan null. atEOF() yöntemi veya eşdeğeri olan Reader var mı?

cevap

1

yapmaya çalışıyorsun ne için standart bir kalıptır:

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

hazır() yöntemi yalnızca bir sonraki okuma bloke edip söyler. Okuyucuda eof varsa, sonraki çağrı engellemez; hemen bir EOF göstergesiyle (readline için null, okumak için -1) geri dönecektir. –

+1

Daha da iyisi: süre yerine yapmak. –

+0

'BufferedReader.readLine() 'adlı JavaDoc," Satır içeriğine sahip bir dize ... veya null ** akış sonuna ulaşılmışsa ** döndürdüğünü "belirtir. – Raedwald

0

hazır() yöntemi çalışmaz. Akıştan okumalı ve EOF'ta olup olmadığınızı görmek için dönüş değerini kontrol etmelisiniz.

+0

Eh, pek çok durumda * çalışır *, ancak bu soruyu cevaplamak için gerekli olanı yapmayacaktır. – EJP

3

docs ki:

public int read() throws IOException
İade: karakter aralığında bir tamsayı olarak, okuma 0-65.535 (0x00-0xffff), veya akım uç vardır takdirde -1 ulaşıldı.

Yani bir BufferedReader ve taleb() durumunda

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

gibi EOF karşı kontrol etmelisiniz bir Reader durumunda, olabilir

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

çünkü readline() EOF'de null değerini döndürür.

0

bu işlevi kullanın:

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

* Sadece ve eğer * Okuyucu 'işareti()' ve 'reset()' işlevini destekliyorsa. – EJP

İlgili konular