Auslesen einer TXT optimieren?
-
Hi,
ich hab hier eine Anwendung die aus eine Textdatei einließt. Diese Textdatei wird sekündlich neu befüllt. Ich benötige aber immer nur die letze Zeile aus dieser Datei und danach wird die gewonnene Zeile mit substring zerstückelt um die gewünschten daten weiter zu verarbeiten. Jetzt wollt ich fragen welche Methode wohl die geeigneste wäre um das umzusetzen, möglichst auch die Speicher schonendste? Ich hab es momentan so, nur glaube ich nicht, das das die beste Variante ist, auch wenn meine funktioniert. Das ganze wiederholt sich übrigens alle 5 Sekunden mit dem einlesen. Die Zeilen sind übrigens immer gleich lang und durch einen Zeilenumbruch abgetrennt.
public void einlesen() { // Lies die letze Textzeilen aus der Datei in einen String String s=null ; String zeile = null; try { URL url = new URL(getCodeBase(),"datei.txt"); // statt URL wenn Datei im Verzeichnis der Anwendung liegt BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream())); while ( null != (zeile = in.readLine())) { s = zeile; } in.close(); } catch (Exception ex) { System.out.println("datei.txt defekt!"); } return(s); } public double sTeilen() { String s = einlesen(); ... }
-
Falls du alle fünf Sekunden jeweils die letzte Zeile in der Datei lesen möchtest, also nicht jede, dann ist das hier vielleicht für dich interessant:
http://java.sun.com/j2se/1.4.2/docs/api/java/io/RandomAccessFile.html
-
Lies doch die letzten X Bytes ein und lies dann solange rückwärts, bis du einen Zeilenumbruch entdeckst oder die komplette Datei drin hast.
-
Also wenn ich das recht verstehe hab ich beim RandomAccess eine art zufälliges auslesen und kein bestimmten einstiegspunkt. zumindest klingt das so in der beschreibung.
wie würde man das denn machen mit den bytes? Ich weiß das meine Zeile 104 Zeichen lang ist.
-
Wahlfrei, nicht zufällig.
Das heißt, du kannst selbst bestimmen, von welcher Position aus du lesen willst. Die dazugehörige Funktion heißt seek():
http://java.sun.com/j2se/1.4.2/docs/api/java/io/RandomAccessFile.html#seek(long)