Ich möchte eine große ASCII-Textdatei (20 GB) Zeile für Zeile lesen und einen Teil dieser Zeilen in eine separate Datei kopieren. Der folgende Beispielcode verliert Daten beim Schreiben in die Ausgabedatei. Ich habe den Reader mit einigen Druckern getestet und es funktioniert wie erwartet. Ich habe versucht, den Puffer des BufferedWriter zu erhöhen, aber keine Verbesserung. Auch flush() hat nicht funktioniert. Die Ausgabedatei sollte in diesem Fall ungefähr 40 MB groß sein.Verlieren von Daten beim Schreiben mit BufferedWriter
Ich hoffe, dass Sie mir helfen können, Tim Gruß
public void split() throws Exception{
BufferedReader inStream = new BufferedReader(new FileReader("input.txt"));
BufferedWriter outStream = new BufferedWriter(new FileWriter("output.txt"));
for(int i=0;i<700000;i++){
String tempString = inStream.readLine().trim();
if(doOtherStuff(tempString,i)){
break;
}
outStream.write(tempString);
outStream.newLine();
}
inStream.close();
outStream.close();
}
Warum verwenden Sie eine for-Schleife und keine while-Schleife? –
Die Information, wieviele Zeilen ich kopieren muß, wird mit der ersten Zeile der Datei eingelesen. Ich dachte, das ist nicht relevant für das Problem, also kurz gesagt ein bisschen. – timmiotooltim
Sie sagen uns nicht genau, welche Daten verloren gehen oder wo, und Sie wissen nicht, warum Ihr Code sich schlecht benimmt, also ist *** all *** relevant. Ich habe die Erfahrung gemacht, dass Sie unabhängig davon, wie viele Zeilen die Datei enthält, eine while-Schleife besser verwenden und den BufferedReader Sie wissen lassen kann, wenn keine Zeilen mehr zu lesen sind. Es ist viel mehr idiotensicher. –