Frage

Ich habe die tomcat Protokolldatei zu lesen, und nach einiger Zeit (zum Beispiel: eine Stunde) Ich werde die Datei erneut (nur für die neu hinzugefügte Inhalte) lesen, so schaffe ich das Random die letzte Postion I aufnehmen abgeschlossen und die BufferedReader.readLine () Methode verwendet werden.

Allerdings fand ich, dass irgendwann ich nicht die ganze Zeile der Datei lesen kann.

Zum Beispiel kann der Kater ist Tring den folgenden Inhalt (nur Beispiel) zu schreiben:

192.168.0.0 localhost /index.html .....

Und in diesem Moment, wenn ich lese, ich kann das Ergebnis erhalten:

192.168.0 0 localhost /index.html .....

oder

192.168.0.0 localhost /index.html .....

Das ist zu sagen, lesen Sie meine Leser eine uncomplete Zeile, wenn diese Zeile geschrieben wird.

Also habe ich eine Ahnung, fragen sich die Linie zu entscheiden, ob die Lesung wird abgeschlossen ist?

Dies ist der Kern-Code:

raf = new RandomAccessFile(file, "r");
raf.seek(pos);
while ((line = raf.readLine()) != null) {
    System.out.println(line);
}
pos = raf.getFilePointer();
raf.close();

Ich habe versucht, diese (die contidtion hinzugefügt werden):

raf = new RandomAccessFile(file, "r");
raf.seek(pos);
while ((line = raf.readLine()) != null) {
    if(line.chartAt(line.length()-1)=='\n'){
        System.out.println(line);
    } else
        raf.seek(pos); //roll back to the last position

}
pos = raf.getFilePointer();
raf.close();

Aber es funktioniert nicht ..

Jede Idee?

War es hilfreich?

Lösung

readline verbraucht das Newline-Zeichen. Sie können es nicht, um zu bestimmen, wenn Sie eine komplette Linie haben oder nicht. Sie benötigen ein Byte zu einem Zeitpunkt, zu lesen und die Linie selbst analysieren.

Auch Sie sind nicht auf der Position zu bewegen, wenn Sie eine gültige Zeile erhalten ..

Andere Tipps

readLine() Streifen EOL Zeichen, so dass Sie es nicht sehen. Es gibt keinen Unterschied zwischen EOF und EOL aus seiner Sicht, die in Ihrem Fall ist beunruhigend. Neben Peter-Lösung, können Sie versuchen, einen Byte zurück suchen, nachdem Sie die Zeile lesen und überprüfen, ob es EOL war oder nicht. Seien Sie vorsichtig über Zeilenende-Stil verwendet wird, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top