# Letzte Zeile eines Files bestimmen, einlesen & weiterverarbeiten



## Grodax (9. Oktober 2007)

Hallo allerseits !

ich bin noch nicht sehr geübt im Programmieren / mit Java, deswegen habt ein bisschen Nachsicht 

also ich hab folgende Aufgabenstellung:
Ich will ein Logfile nach einem vordefiniertem Ergebnis-String durchsuchen & dann den Inhalt des Strings weiterverarbeiten.
vom diesem Ergebnisstring weiss ich, dass er sich am File-Ende oder kurz davor befindet. das Logfile kann aber ziemlich gross werden.


Mein Stand:
- das Weiterverarbeiten des ermittelten Strings werde ich mit nem Stringtokenizer machen.  sobald ich den String ermittelt habe, sollte ich schon zurecht kommen.
- ich könnte mit einem beliebigen java.io.BufferedReader oder besser mit nem davon geerbeten java.io.LineNumberReader die komplette Datei durchgehen bis ich bei der letzten Zeile bin & mir merken wieviel Zeilen die Datei hat.
Dann gehe ich anhand der ermittelten Zeilennummer die Datei "rückwärts" von hinten nach vorne durch und suche nach meinem String
Problem: scheint mir ziemlich ungeschickt, wenn das Logfile gross ist, in meinem Fall z.b. 5MB
- ich könnte mit nem java.io.RandomAccessFile die Länge der Datei als "Long" ermitteln. Damit komme ich gleich auf das letzte Zeichen. Mit java.io.RandomAccessFile.readLine() könnte man mit der selben Klasse auch Zeilen einlesen.
Problem: Sackgasse, da ich nicht weiss wie ich sozusagen rückwärts vom letzten Zeichen aus den jeweiligen Zeilenanfang bestimme. ( Ich müsste wohl vor readline() erst den Zeiger von RandomAccessFile auf den Zeilenanfang setzen )
-> gibts irgendeine Möglichkeit (ne read-Methode) mit der ich eindeutig das Zeichen für nen Zeilensprung ermitteln kann ?
sind Carriage-Return & Line-Feed die einzigen 2 Zeichen, auf die ich für nen Zeilensprung testen müsste ?
Welche Repräsentationen dieser 2 Zeichen gibt es ? kann/muss ich irgendwie mit ihren ASCII-Zeichen arbeiten, in welcher Darstellung auch immer ?
(hier http://en.wikipedia.org/wiki/ASCII hab ich z.b. ne hexadezimale Darstellung gefunden. Sind das in Java dann Character-Zeichen ?)



Viele Grüsse
Grodax


----------



## Grodax (9. Oktober 2007)

also ich hab jetzt rausgefunden, dass
char test = 10 & char test2 = 13    (also Dezimal-Werte)
die entsprechenden Characters in Java für LineFeed & CarriageReturn sind.

wenn ich jetzt mit java.io.RandomAccessFile.readChar() die Zeichen rückwärts auslese, bin ich wahrscheinlich nicht so vollkommen auf dem Holzweg ?


----------

