2010-11-26 17 views
2

Ich suchte SO, um zu sehen, ob es eine Frage dazu gab, aber anscheinend nicht so. Ich lese gerade eine Textdatei mit BufferedReader. Mein einziges Problem ist, dass ich NUR die letzte Zeile meiner Datei lesen möchte. IE: Ich schreibe 10 mal etwas in eine Datei, ich möchte den 10. Eintrag bekommen. Ich könnte einfach eine Schleife laufen lassen, die jede Zeile liest, bis ich meine 10. Zeile treffe, aber ich frage mich, ob es einen effizienteren Weg gab, da die Datei weiter zunehmen wird und am Ende mehr als 100 Einträge haben könnte.Wie erreicht man effizient das Ende einer Textdatei in Java?

Auch würde ich lieber kein externes Paket verwenden, wenn möglich.

Danke!

+2

Optimieren Sie Ihren Code nicht, bevor Sie sich als Engpass erwiesen haben. Tun Sie es so, wie Sie beschreiben, wie Sie es tun könnten und wie gut es funktioniert. – oherrala

Antwort

4

Das Lesen von 100 Zeilen wird kaum ein Problem sein.

Es ist möglich, eine Textdatei rückwärts zu lesen, aber:

  • auf der Codierung je, kann es sehr schwierig sein. Insbesondere Kodierungen, die variable Breiten für verschiedene Zeichen haben, aber nicht klar machen, wo der Beginn eines Zeichens ist
  • Es ist wirklich, wirklich hässlicher Code selbst in guten Fällen. Sie haben in der Datei Überspringen rückwärts zu halten, herauszufinden, wo die Linie beginnt usw.

Wenn Sie sehen möchten, wie schrecklich es ist, die ich in diesem Stack Overflow question einen Code haben - es ist in C#, aber Sie sollten es einigermaßen leicht verstehen können. Hoffentlich ist es genug, um Sie davon zu überzeugen, es nicht zu tun.

Wenn Sie eine Datei mit 100.000 Zeilen hatten, könnte es sich lohnen ... aber 100? Auf keinen Fall. Lies einfach die ganze Datei.

+0

Die größte Verzögerung beim Lesen einer Datei besteht darin, sie von der Festplatte zu entfernen. Für Dateien unter 4K gibt es keinen Unterschied in dieser Zeit. Bei Dateien mit weniger als 64 KB werden Sie den Unterschied nicht bemerken. –

0

Der einzige Weg, dies zu tun ist, wenn Sie die Länge der Datei bereits wusste, die es scheint nicht zu tun. Sie müssen nur darüber iterieren. 100+ Zeilen sollten nicht viel länger dauern als 10 Zeilen. Wenn Sie jetzt eine Million Zeilen hätten, würden Sie wahrscheinlich zu einer Datenbank oder ähnlichem gehen wollen.

0

Die Klasse, die Sie verwenden können, ist FileChannel. Das Problem, das Sie haben werden (in jeder Sprache) ist, dass Sie nicht wissen, wo in der Datei positioniert werden soll, um die letzte Zeile zu erhalten, es sei denn, Sie kennen die genaue Länge der Zeile. Sie können einfach genug sichern, um eine vernünftige Leitungslänge zu erhalten und dann danach suchen.

3

Vielleicht ist eine Datei das falsche Werkzeug. Woher kommt die Textdatei? Wie wäre es mit dem Einfügen der Zeilen in eine Datenbanktabelle? Dann ist es ziemlich einfach und schnell, die letzte Reihe zu finden.

+1

Obwohl dies die Frage nicht beantwortet, kann ich einfach nicht zustimmen, also verdient dies eine Abstimmung. – BalusC

+0

Danke @BalusC. Ich will nicht die Frage aus Sturheit oder was hast du beantworten, sondern bieten stattdessen eine andere Möglichkeit, die Aufgabe zu erfüllen. Manchmal stelle ich Fragen, die zu spezifisch sind. Ich habe das Glück, dass ich einige geekige Freunde habe, die mich dazu bringen, einen Schritt zurück zu machen. –

Verwandte Themen