Input/Output 20Mb Textdatei zeilenweise auslesen

toenjes

Mitglied
Moin,

ich möchte eine relativ große Textdatei (bis zu 20MB) zeilenweise durchgehen und dann jede Zeile verarbeiten. Zurzeit mache ich das mit BufferedReader - aber das dauert zu lange.

Gibt es eine schnellere Möglichkeit eine Textdatei zu verarbeiten?

Kann man in einer Textdatei gleich zu einer bestimmten Zeile springen und von dort aus dann weiter Arbeiten?
 
J

JohannisderKaeufer

Gast
wie lange dauert es denn?
viel zu lange oder sehr viel zu lange oder fast eine Ewigkeit oder könnte schon schneller sein.

gehst du das ganze einmal oder mehrmals durch?

Liegt der Zeitverbrauch tatsächlich am Einlesen? Du könntest hierzu deine ganze Datei einmal in ein String[] oder eine List<String> einlesen, dann einen Timestamp setzen und die Verarbeitung deiner Daten aus der liste starten und beim beenden wieder einen Timestamp setzen. Dann siehst du was wie lange braucht. 20MB sollten eigentlich locker in den Arbeitsspeicher passen.
 
B

bygones

Gast
ich arbeite taeglich mit GB an daten... was soll bei 20MB bitte gross sein?!

zeig mal lieber Code - ich befuerchte die Optimierung liegt nicht im Verwenden anderer Klassen....
 

toenjes

Mitglied
Ich hätte vielleicht dran denken sollen zu erwähnen das ich grade mit JSP ein wenig rumspiele. Wenn die die Klasse über das JRE normal laufen lasse ist die Laufzeit wirklich nicht sehr dramatisch, über den WebServer (Glass Fisch 3) aber schon (und mein Server hat nur 1GB Ram und nicht 4 wie mein PC -.-)

Hier die Methode zum auslesen der Datei:

Java:
public String printFile() {
        String print = "";
        try {
		BufferedReader in = new BufferedReader(new FileReader(file));
		String zeile = null;
		while ((zeile = in.readLine()) != null) 
			print += zeile+"<br>";
	} catch (IOException e) {
		e.printStackTrace();
	}

        return print;
    }
 
S

SlaterB

Gast
das Problem hier ist ein bekanntes und vom Reader unabhängig,
es ist die Addition der Strings per Schleife,
bei jeder neuen Zeile müssen die bisherigen 15 MB String in eine neue Variable kopiert werden usw.,
so schaffst du dir GB an Arbeit,

verwende StringBuilder mit append(), dann geht das rasend schnell
 

Ark

Top Contributor
Was passiert denn weiter mit dem String, der von [c]printFile()[/c] erzeugt wird? Wenn der anschließend wieder nur z.B. auf der Standardausgabe ausgegeben werden soll, ist es unnötig, vorher die gesamte Datei einlesen zu wollen.

Beispiel, wo zeichenweise gelesen und sofort ausgegeben wird:
Java:
public void printFile() {
    try {
        BufferedReader in = new BufferedReader(new FileReader(file));
        int c;
        while ((c = in.read()) != -1) 
            System.out.print((char)c);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Beispiel, wo zeilenweise gelesen und sofort ausgegeben wird:
Java:
public void printFile() {
    try {
        BufferedReader in = new BufferedReader(new FileReader(file));
        String line;
        while ((line = in.readLine()) != null) 
            System.out.println(line);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Welche der beiden Varianten besser geeignet ist, müsste dann im Zweifelsfall nachgemessen werden. (Es gibt noch andere Möglichkeiten, die theoretisch noch schneller sein sollten, aber die sehen vor allem hässlicher aus. ;))

Wenn der Dateiinhalt doch gespeichert werden soll/muss, ist die von SlaterB vorgeschlagene Variante eine einfache und effiziente.

Ark
 

toenjes

Mitglied
okay, schonmal danke für die Hinweise, ich hab den Code nun abgeändert:

Java:
public String printFile() {
        StringBuilder print = new StringBuilder();
        try {
                Scanner in = new Scanner(new FileReader(file));
		String zeile = null;
		while (in.hasNextLine()) {
			try {
                            print.append(in.nextLine());
                            print.append("<br>");
                            System.out.println(in.nextLine());
                        } catch (NoSuchElementException e) {
                            e.printStackTrace();
                        }

                }
	} catch (IOException e) {
		e.printStackTrace();
	}

        return print.toString();
    }

Jetzt gehts schonmal deutlich schneller - aber immer noch zu langsam für meinen Geschmack, gibts da noch weitere Optimierungsmöglichkeiten?
 
S

SlaterB

Gast
> print.append(in.nextLine());
> print.append("<br>");
> System.out.println(in.nextLine());
hier wird 50% in print geaddet, 50% ohne hasNextLine()-Prüfung ausgegeben, ist das dein Ziel?
siehe lieber Code von Ark, 2 Min. vor deinem gepostet


was genau heißt eigentlich langsam?
die System.out.println-Ausgabe könnte für sich 100x länger dauern als das restliche Einlesen,

try/catch in der Schleife ständig neu aufgebaut muss vielleicht wirklich sein, ob das Zeit kostet?
alles eigentlich langsam im unmessbaren Bereich, bist du bei 1 sec für 20 MB, oder noch deutlich drüber?
 

toenjes

Mitglied
so okay, das addieren der Wertr war sowieso nur um zu sehen ob das Script funkioniert, jetzt habe ich nur noch einmal append - und das script läuft rasent schnell :)

Das eigentliche schwere bzw. zeitaufwändiger sind die Operationen die nun bei jeden Schleifendurchlauf kommen...

was genau heißt eigentlich langsam?
die System.out.println-Ausgabe könnte für sich 100x länger dauern als das restliche Einlesen,

try/catch in der Schleife ständig neu aufgebaut muss vielleicht wirklich sein, ob das Zeit kostet?
alles eigentlich langsam im unmessbaren Bereich, bist du bei 1 sec für 20 MB, oder noch deutlich drüber?

naja, das script hat vorher immer knapp 10 minuten gedauert, und mein server ist um einiges langsamer als mein PC, jetzt wo ich das entfernt habe gehts wie gesagt :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
V Auf Textdatei in jar zugreifen Java Basics - Anfänger-Themen 3
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
J durch drücken eines buttons text in einer textdatei speichern Java Basics - Anfänger-Themen 2
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
M Datum aus einer Textdatei holen Java Basics - Anfänger-Themen 9
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
Fab1 Input/Output Textdatei auslesen Java Basics - Anfänger-Themen 4
O grosse Textdatei performant als string speichern Java Basics - Anfänger-Themen 8
P Mit offset aus Textdatei auslesen Java Basics - Anfänger-Themen 3
C Textdatei einlesen Java Basics - Anfänger-Themen 8
V Falsches Auslesen von Textdatei Java Basics - Anfänger-Themen 3
N Textdatei lesen mit Umlauten Java Basics - Anfänger-Themen 16
N In Textdatei speichern und auslesen Java Basics - Anfänger-Themen 18
M Textdatei einlesen Java Basics - Anfänger-Themen 3
M Liste in Textdatei schreiben Java Basics - Anfänger-Themen 7
B Input/Output Textdatei einlesen Windows / Linux Java Basics - Anfänger-Themen 2
F Textdatei einlesen Java Basics - Anfänger-Themen 7
C Textdatei einlesen -> Probleme Java Basics - Anfänger-Themen 3
K Input/Output Textdatei scheibchenweise auslesen Java Basics - Anfänger-Themen 8
S Textdatei stückweise einlesen Java Basics - Anfänger-Themen 7
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
N Textdatei wird beim Speichern nicht überschrieben, sondern ergänzt Java Basics - Anfänger-Themen 4
A Double Array in TextDatei schreiben Java Basics - Anfänger-Themen 9
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
B OOP Aus Textdatei auslesen Java Basics - Anfänger-Themen 11
P Textdatei auf erste Zeichenkette Prüfen... Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben