Große .txt einlesen - Idee?

Java4Life

Mitglied
Hi,
ich wollte ein Programm schreiben,dass eine sehr,sehr große .txt einliest (zeilenweise). Auf die Zeilen einen regex anwendet und dann eine neue Datei mit der Ausgabe schreibt...

Wie gesagt ist das Problem die größe der Datei...Bei kleineren funktioniert der Algorithmus 1a. Wenn ich aber die eigentlichen,großen Dateien einlesen will, dann wird anscheinend die Datei nicht vollständig geladen.
Die Dateien sind ca. 1 - 1,5 GB groß! Arbeitsspeicher ist ausreichend vorhanden (3,5 gb) und wird auch nicht voll ausgelastet.

Hier noch ein kleiner "prinzipieller" Codeausschnitt:

Java:
FileReader fr = new FileReader(chooser.getSelectedFile());
			BufferedReader br = new BufferedReader(fr);
			String s;
			while((s = br.readLine()) != null) {
				//schreibe 
		}
			fr.close();

Hat jemand eine Idee,ob man eventuell die Datei besser puffern kann bzw. wie vielleicht erfahrende Programmierer bei sowas vorgehen? Ich meine, bei Tools wie UltraEdit geht es ja auch...Aber eigentlich dürfte es ja kein Problem sein,dass durch Java alles über die VM geht -oder?
Oder sind Threads die Lösung?

Bin für alle Ideen dankbar :toll:
 

Jedit

Aktives Mitglied
Also ist jetzt nur ein Schuss ins Blaue von mir (hab schon zu lang nix mit Java gemacht). Aber könnts vielleicht am garbage collector liegen, weil s ein String ist und bei jeder neuen Zuweisung ein neues Objekt angelegt(?) wird? Eventuell einfahc mal mit nem StringBuilder versuchen ... aber wie gesagt ... lange Java Pause, könnt auch totaler Stuss sein.
 

Java4Life

Mitglied
Das merke ich daran,dass er aus einer 1 GB Datei eine paar hundert kilobyte große .txt macht. Und mein Algo ist richtig - das weiß ich (klappt ja schließlich mit kleineren Dateien) ^^

Kurzgefasst:
normale Datei (10 mb oder so) --> alles gut (es wurde erfolgreich eine neue aussortierte Datei erstellt:9mb)

große Datei (1 gb) --> wird eine Datei erstellt (dort verschluckt er Wörter bzw. erstellt eine 400kb Datei)

Hat denn jemand zufällig schon Erfahrungen im Zusammenhang mit der Verarbeitung von sehr großen Dateien (1GB +) gehabt?

Und Festplatte/RAM ist auch ausreichend vorhanden.
 
Zuletzt bearbeitet:
A

alsodenn

Gast
Das irgendwas verschluckt wird, kann eigentlich nicht sein. BufferedReader ist eigentlich ausreichend. Sieh auch FileChannel
 

Java4Life

Mitglied
mein Writer sieht ungefähr so aus:

Java:
FileWriter write = new FileWriter("ausgabe.txt");

FileReader fr = new FileReader(chooser.getSelectedFile());
		BufferedReader br = new BufferedReader(fr);

String s;
while((s = br.readLine()) != null) {
	
      if (//das entspricht dem pattern){
           write.append(s + "\n");
     }
		}
write.close();
fr.close();
 

diel2001

Bekanntes Mitglied
Java:
new FileWriter("ausgabe.txt", true);
du musst ihm auch sagen, dass er der datei was anhängen soll und nicht immer eine neue erstellen soll

Seh gerade ist wohl doch der falsche Ansatz gewesen
 
Zuletzt bearbeitet:

hansmueller

Bekanntes Mitglied
Hallo,

ist jetzt vielleicht eine blöde Frage, aber warum verwendest du für das Schreiben nicht die Methode .write(), sondern .append()?

Ansonsten würde ich auch wie bone2 ein .flush() nach dem Schreiben empfehlen.

MfG
hansmueller
 

henpara

Bekanntes Mitglied
Frage: Warum benutzt du keinen BufferedWriter?

Auszug aus FileWriter:
public class FileWriter
extends OutputStreamWriter

Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.

[...]

FileWriter is meant for writing streams of characters. For writing streams of raw bytes, consider using a FileOutputStream.

das aus BufferedWriter:
Write text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.

The buffer size may be specified, or the default size may be accepted. The default is large enough for most purposes. [...]

Ich denke genau da liegt der Hase begraben, am Buffer.
 

Java4Life

Mitglied
die methode write dürfte alles in der datei löschen. die methode append jedoch hängt alle strings an (wie es auch sein soll).
man könnte jedoch (glaube ich) "append" ohne \n schreiben...

genau nach so etwas habe ich gesucht bzw. es vermutet, dass es mit dem buffer zusammenhängt...
werde es bei gelegenheit mal einbauen und meine erkenntnisse hier posten.

danköö
 
Zuletzt bearbeitet:

hansmueller

Bekanntes Mitglied
Hallo,

Java4Life hat gesagt.:
die methode write dürfte alles in der datei löschen.
Sollte eigendlich nicht passieren, solange du den Stream nicht schließt.

Hier mal ein kleines exemplarisches Beispiel, wie man das mit den BufferedWriter machen könnte:
Java:
			y = new File("DeineDatei");
			Dateischreiben = new FileWriter(y);
			Datenoutput = new BufferedWriter(Dateischreiben);
			
			while(DeineBedingung)
			{
				//Hier irgendwas machen.				
										
				Datenoutput.write(Hier_kommt_deine_zu_schreibende_Zeile_rein);
				Datenoutput.newLine();//Zeilenumbruch speziell für das verwendete Betriebsystem
				Datenoutput.flush();//Würde ich mal ausprobieren.
			}					
			
			Datenoutput.close();
			Dateischreiben.close();

MfG
hansmueller
 

Java4Life

Mitglied
ok,hier nochmal kurz feedback...

tatsächlich scheint der BufferedWriter tadellos zu funktionieren. (auch ohne das von vielen "gehasste" flush) ^^

Auf jeden Fall nochmal ein Danke an alle!!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Arbeitsfeld in gleich große Bereiche einteilen Java Basics - Anfänger-Themen 2
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
C Große Zahlen vergleichen Java Basics - Anfänger-Themen 19
S 4 große Textdateien zu einer Mergen Java Basics - Anfänger-Themen 5
K Große Datenliste Java Basics - Anfänger-Themen 2
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
1 Extrem große Variable Java Basics - Anfänger-Themen 1
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Schneller Quadratzahltest für beliebig große natürliche Zahlen Java Basics - Anfänger-Themen 2
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
B große jpeg verarbeiten Java Basics - Anfänger-Themen 8
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
X Compiler-Fehler javac - 08 eine zu große int? Java Basics - Anfänger-Themen 11
turmaline String teilen in gleich große strings Java Basics - Anfänger-Themen 15
F Große Potenzen berechnen Java Basics - Anfänger-Themen 6
E Datentypen Große Zahl erzeugen Java Basics - Anfänger-Themen 5
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
F Große Daten und große Array Java Basics - Anfänger-Themen 21
O Performant große Dateien durchsuchen Java Basics - Anfänger-Themen 8
J Große animierte Gif preloaden und solange mit einer nicht animierten ersetzen Java Basics - Anfänger-Themen 5
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
K Eclipse EMF und das große HÄ? Java Basics - Anfänger-Themen 5
T .split(";") nicht gleich große arrays werden erzeu Java Basics - Anfänger-Themen 2
G String aus Zahlen multiplizieren -> unendlich große ! Java Basics - Anfänger-Themen 13
M Spielt der Debugger bei java eine große Rolle Java Basics - Anfänger-Themen 3
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
L JTextArea große setzen Java Basics - Anfänger-Themen 5
S große probleme mit java Java Basics - Anfänger-Themen 6
R große Datenmenge in Datei schreiben Java Basics - Anfänger-Themen 8
M FileOutputStream und zu große Zahlen! Java Basics - Anfänger-Themen 10
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
B Probleme große Strings zu schreiben Java Basics - Anfänger-Themen 2
A große errechnete datenmengen sofort in datei schreiben? Java Basics - Anfänger-Themen 6
S Große Text dateien einbinden Java Basics - Anfänger-Themen 3
R große Zahlen Java Basics - Anfänger-Themen 4
R Große Zahlen Java Basics - Anfänger-Themen 3
T Große Zahlen aufgesplittet in verketteter Liste speichern Java Basics - Anfänger-Themen 4
N Große Probleme mit StingBuffer und Array Java Basics - Anfänger-Themen 2
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben