Java: Finde heraus, ob die letzte Zeile einer Datei leer ist

Ich habe eine Frage zu einer Schulaufgabe, die ich in Java machen muss. Ich muss Daten von einer Datei laden und auf Fehler in diesen Dateien prüfen.

Ich lese die Datei mit einem bufferedReader der bis zum Ende der Datei perfekt funktioniert: Es ignoriert die letzte Zeile, wenn diese Zeile leer ist.

Ich weiß, wie man nach leeren Zeilen sucht, aber die letzte Zeile gibt einfach kein Ergebnis mit der function readLine() von bufferedReader .

Es ist wichtig, dass ich weiß, ob die letzte Zeile leer ist, wie es sein muss. Wenn die leere Zeile nicht existiert, sollte es einen Fehler geben.

Kurz gesagt, ich brauche einen Weg, um den Unterschied zwischen den folgenden Situationen zu erkennen (wobei CRLF das Ende der Zeile ist):

Situation 1 (richtig):

 line x CRLF line y CRLF 

Situation 2 (falsch):

 line x CRLF line y 

Beide dieser Situationen geben eine Null auf readline() nach Zeile y zurück.

Ich zähle die Zeilen der Datei auf dem Weg, also wenn ich einen Zeilenzähler habe (Hinweis: dieser Zähler muss auch diese leere Zeile zählen, alle die ich gefunden habe zählen sie nicht)

Die Dateien enthalten auch immer leere Zeilen, wenn das für den benötigten Code einen Unterschied machen sollte (diese Zeilen werden korrekt erkannt, da der EOF nicht in diesen Zeilen enthalten ist)

Beachten Sie, dass das Programm mit oder ohne diese letzte Zeile arbeitet. Es ist nur so, dass die Zuweisung mir sagt, dass ich einen Fehler geben soll, wenn es nicht da ist.

    Wenn Sie feststellen möchten, ob die letzte Zeile eine CRLF hat, können Sie am Ende lesen.

     public static boolean lastLineisCRLF(String filename) { RandomAccessFile raf = null; try { raf = new RandomAccessFile(filename, "r"); long pos = raf.length() - 2; if (pos < 0) return false; // too short raf.seek(pos); return raf.read() == '\r' && raf.read() == '\n'; } catch (IOException e) { return false; } finally { if (raf != null) try { raf.close(); } catch (IOException ignored) { } } } 

    Werfen Sie einen Blick auf java.util.Scanner . Sie können mit Scanner#hasNextLine() und Scanner#nextLine() iterieren.

     Scanner scanner = new Scanner(file, "UTF-8"); String currentLine = null; while(scanner.hasNextLine()) { currentLine = scanner.nextLine(); } // last line System.out.println(currentLine); 

    Es gibt keine leere Zeile in Ihrer “Situation 1” . Die CRLF gehört zu Zeile y und danach gibt es nichts (was readline() Ihnen auch sagt). Es ist nur so, dass in einem Editor diese CRLF dem Cursor sagt, dass er eine Zeile nach unten gehen soll, also sieht es wie eine neue, leere Zeile aus, aber das ist nur eine “optische Täuschung” durch den Editor, der die Zeichen CR/LF interpretiert ein Hinweis, um den Cursor in einer neuen Zeile anzuzeigen.

     while ((tmp = br.readLine()) != null) { strLine = tmp; } String lastLine = strLine; 

    Dadurch erhalten Sie die letzte Zeile der Datei. Warum nicht prüfen, ob die letzte Zeile leer ist oder nicht?