Effizientes Abrufen der letzten Zeile einer großen Textdatei
Beim Umgang mit umfangreichen Textdateien ist das effiziente Abrufen der letzten Zeile von entscheidender Bedeutung. Der wahlfreie Zugriff kann bei großen Dateien zeitaufwändig sein und ist daher unpraktisch. Ziehen Sie stattdessen diese Lösungen in Betracht:
Gibt die letzte nicht leere Zeile zurück:
Die folgende Tail-Funktion ruft schnell die letzte nicht leere Zeile einer Datei ab, ohne oder zu laden Durchlaufen der gesamten Datei. Es sucht bis zum Ende der Datei und liest Zeichen rückwärts, bis es auf einen Zeilenumbruch stößt, erstellt dann die letzte Zeile und gibt sie zurück.
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
Die letzten N Zeilen zurückgeben:
Wenn Sie stattdessen die letzten N Zeilen benötigen, verwenden Sie die Funktion tail2. Es verwendet eine ähnliche Technik, zählt jedoch Zeilenumbrüche, um die gewünschten Zeilen zu bestimmen, bevor die Ausgabe umgekehrt und erstellt wird.
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
Aufrufen und verwenden:
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Unicode-Überlegungen:
Die Implementierung verwendet Zeichenumkehr, um die Zeilen zu rekonstruieren. Obwohl dies im Allgemeinen effektiv ist, kann es bei Zeichen wie Akzenten und Hüten zu Unicode-Umkehrproblemen kommen. Daher sind gründliche Tests unerlässlich, bevor dieser Ansatz in verschiedenen Sprachen verwendet wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3