Wie lese ich den gesamten Text in der Textdatei mit Ausnahme der letzten Zeile?

Ich habe einen Code geschrieben, um den ganzen Text in der Textdatei zu drucken, aber ich konnte nicht wissen, wie man es ermöglicht, den ganzen Text außer letzte Linie zu lesen

Der Code :

public class Files {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
   //TODO code application logic here
   //-- This Code is to print the whole text in text file except the last line >>>
    BufferedReader br = null;
    try {
        String sCurrentLine;
        br = new BufferedReader(new FileReader("FileToPrint.txt"));
        String s = br.readLine();
        while (true) {
            if ((sCurrentLine = br.readLine()) != null) {
                System.out.println(s);
                s = sCurrentLine;
            }
            if ((sCurrentLine = br.readLine()) != null) {
                System.out.println(s);
                s = sCurrentLine;
            } else {
                break;
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null) {
                br.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


}

}

Ich möchte, dass der obige Code den Text mit Ausnahme der letzten Zeile lesen kann.

danke für die Hilfe

0
Warum liest du eine Zeile zweimal in der Schleife?
hinzugefügt der Autor Jon Skeet, Quelle

2 Antworten

Es gibt keine Möglichkeit, Ihr Programm so zu schreiben, dass es die letzte Zeile nicht liest ; Das Programm muss die letzte Zeile lesen und dann einen anderen Lesevorgang versuchen, bevor es erkennen kann, dass die Zeile die letzte Zeile ist. Was Sie brauchen, ist ein Lookahead-Algorithmus, der ungefähr so ​​aussieht wie dieser Pseudocode:

read a line into "s"
loop {
    read a line into "nextS"
    if there is no "nextS", then "s" is the last line, so we break out of the
        loop without printing it
    else {
        print s
        s = nextS
    }
}
0
hinzugefügt

Der einfachste Ansatz besteht wahrscheinlich darin, die vorherige -Zeile jedes Mal zu drucken:

String previousLine = null;
String line;
while ((line = reader.readLine()) != null) {
    if (previousLine != null) {
        System.out.println(previousLine);
    }
    previousLine = line;
}

Ich würde auch vorschlagen, Ausnahmen zu vermeiden, wenn Sie sie nur ausdrucken und dann fortfahren - Sie würden besser eine try-with-resources-Anweisung verwenden, um den Reader zu schließen (wenn Sie Java 7 verwenden) und zu deklarieren dass Ihre Methode IOException auslöst.

0
hinzugefügt
Bitte, das ist nicht meine Frage. Meine Frage ist einfach: Gibt es eine Möglichkeit, den ganzen Text mit Ausnahme der letzten Zeile zu lesen?
hinzugefügt der Autor user2976643, Quelle
@ user2976643: Dann müssen Sie Ihre Frage klären. Dadurch werden alle bis auf die letzte Zeile der Datei ausgedruckt, was meiner Meinung nach das war, was Sie erreichen wollten. Wenn Sie wirklich versuchen, das Lesen der letzten Zeile zu vermeiden, wie könnte dann etwas wissen, ob Sie die letzte Zeile erreicht haben?
hinzugefügt der Autor Jon Skeet, Quelle