webentwicklung-frage-antwort-db.com.de

Zeilen mit BufferedReader lesen und auf Dateiende prüfen

Wenn ich so etwas in meinem Code habe:

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

Wie kann ich einen Absturz vermeiden, wenn die nächste Zeile das Ende der Datei ist? (d. h. null)

Ich muss die nächste Zeile lesen, weil es dort etwas gibt, mit dem ich mich befassen muss, aber wenn nicht, stürzt der Code einfach ab.

Wenn dort etwas ist, ist alles in Ordnung, aber ich kann nicht garantieren, dass dort etwas ist.

Also wenn ich so etwas mache: (Pseudocode):

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

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

Das Problem, das ich mit so etwas habe, ist, dass, wenn ich die Zeile gegen null überprüfe, diese bereits in die nächste Zeile übergeht. Wie kann ich sie also noch einmal überprüfen?

Ich habe keinen Weg gefunden, dies zu tun - Vorschläge wären eine große Hilfe.

9
Zippy

Am ... Sie können einfach eine solche Konstruktion verwenden:

String line;

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

Sie können Folgendes verwenden, um nach dem Ende der Datei zu suchen.

public bool isEOF(BufferedReader br)  
{
     boolean result;

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

Wenn Sie alle Zeilen durchlaufen möchten, verwenden Sie Folgendes:

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

Eine Frage an erster Stelle, warum verwenden Sie nicht "Functional Programming Approach"? Wie auch immer, seit Java 1.8 wurde eine neue Methode lines () hinzugefügt. Mit BufferedReader wird der Inhalt als Stream ausgegeben. Es holt alle Zeilen aus der Datei als Stream, dann können Sie die Zeichenfolge anhand Ihrer Logik sortieren und diese dann in einer Liste/Menge sammeln und in die Ausgabedatei schreiben. Wenn Sie den gleichen Ansatz verwenden, müssen Sie sich keine Sorgen über NullPointerException machen. Unten ist der Code-Ausschnitt für dasselbe: -

import Java.io.IOException;
import Java.io.PrintWriter;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.util.stream.Collectors;

public class LineOperation {
    public static void main(String[] args) throws IOException {
            Files.newBufferedReader(Paths.get("C://xyz.txt")).
            lines().
            collect(Collectors.toSet()). // You can also use list or any other Collection
            forEach(System.out::println);
    }

}
0
Abhinav

In Ihrem Fall können Sie die nächste Zeile lesen, da möglicherweise etwas vorhanden ist. Wenn nichts vorhanden ist, stürzt Ihr Code nicht ab.

String line = r.readLine();
while(line!=null){
   System.out.println(line);
   line = r.readLine();
}
0
Sushant Somani