2013-07-16 13 views
7

Jeśli mam coś takiego w moim kodu:Czytanie wierszy z BufferedReader i sprawdzanie końca pliku

String line = r.readLine(); //Where r is a bufferedReader 

Jak mogę uniknąć awarii czy następna linia jest koniec pliku? (czyli null)

Muszę przeczytać następną linię, ponieważ może być tam coś, z czym muszę się uporać, ale jeśli nie ma kodu, po prostu zawiesza się.

Jeśli coś tam jest, wszystko jest w porządku, ale nie mogę zagwarantować, że coś tam będzie.

Więc jeśli mam coś takiego: (pseudo kod):

if (r.readLine is null) 
//End code 

else {check line again and excecute code depending on what the next line is} 

Problem mam z czymś takim jest, że kiedy sprawdzić linię przed null, to już przechodzi do następnej linii, więc jak mogę to sprawdzić ponownie?

Nie udało mi się tego zrobić - wszelkie sugestie byłyby bardzo pomocne.

+1

Naprawdę chciałbym, aby ludzie odrzucili powód podczas głosowania w dół. Oddanie głosu ma wskazywać, że coś jest nie tak z pytaniem, więc może być ponownie sformatowane. Głosowanie w dół bez pozostawienia powodu, dla którego odrzucono głosowanie, nikomu nie pomaga – Zippy

Odpowiedz

23

Am ... Można po prostu użyć takiej konstrukcji:

String line; 

while ((line = r.readLine()) != null) { 
    // do your stuff... 
} 
+4

Jak już odpowiedziałeś, usuwam kopalnię :) – Azad

2

Jeśli chcesz pętli przez wszystkie linie użyć tego:

while((line=br.readLine())!=null){ 
    System.out.println(line); 
} 
br.close(); 
-2

Mogłeś celowo nie wyrzucać błąd wewnątrz pętli . np .:

String s = ""; 
while (true) { 
    try { 
     s = r.readline(); 
    }catch(NullPointerException e) { 
     r.close(); 
     break; 
    } 
    //Do stuff with line 
} 

to, co wszyscy inni mają smutne, powinno również działać.

+2

To prawdopodobnie najgorszy sposób na zrobienie tego ... – Raven

+0

@Raven Dlaczego tak źle? Nie widzę w tym nic złego ... –

+0

Czy to faktycznie rzuciłoby 'NullPointerException'? Myślę, że musisz sprawdzić 'if (s == null)'. –

1

Możesz użyć następujących opcji, aby sprawdzić koniec pliku.

public bool isEOF(BufferedReader br) 
{ 
    boolean result; 

    try 
    { 
     result = br.ready(); 
    } 
    catch (IOException e) 
    { 
     System.err.println(e); 
    } 
    return result; 
}