2013-07-16 25 views
7

Se ho qualcosa di simile nel mio codice:Leggendo linee con BufferedReader e controllo per la fine del file

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

Come posso evitare un incidente se la riga successiva è la fine del file? (ovvero null)

Ho bisogno di leggere la riga successiva perché potrebbe esserci qualcosa che devo affrontare ma se non c'è il codice si blocca.

Se c'è qualcosa, allora tutto va bene, ma non posso garantire che ci sarà qualcosa lì.

Quindi se faccio qualcosa di simile a: (pseudo codice):

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

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

Il problema che ho con qualcosa di simile a questo è, che quando controllo la linea contro nulla, già si sposta sulla riga successiva, quindi, come posso ricontrollarlo?

Non ho trovato un modo per farlo, qualsiasi suggerimento sarebbe di grande aiuto.

+1

Davvero vorrei che le persone lasciassero un motivo per il down-voting. Un down-vote dovrebbe indicare che c'è qualcosa di sbagliato in una domanda, quindi forse può essere riformattata. Votare senza lasciare un motivo per spiegare perché il downvote è stato lanciato aiuta nessuno – Zippy

risposta

23

Am ... Puoi semplicemente utilizzare tale costruzione:

String line; 

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

Come hai risposto per prima, cancellerò il mio :) – Azad

2

Se si desidera collegare attraverso tutte le linee di uso che:

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

Si potrebbe volutamente averlo gettare l'errore all'interno del vostro ciclo . vale a dire:

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

anche quello che tutti gli altri hanno di triste dovrebbe funzionare.

+2

Questo è probabilmente il modo peggiore per farlo ... – Raven

+0

@Raven Perché è così brutto? Non vedo nulla di sbagliato in questo ... –

+0

Questo in effetti getterebbe 'NullPointerException'? Penso che sia necessario controllare 'if (s == null)'. –

1

È possibile utilizzare quanto segue per verificare la fine del file.

public bool isEOF(BufferedReader br) 
{ 
    boolean result; 

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