ich habe ein Problem beim Schreiben von Daten in eine Textdatei. Diese Daten werden nur geschrieben wenn ich der Write-Methode des FileWriters noch einen min. 4-Zeichen langen String anhänge.
Kann mir jemand erklären, warum das so ist und wie ich das besser lösen kann?
Zudem werden nicht alle Daten übertragen. Es fehlen ein paar Zeichen am Ende der Datei.
Code:
int pufferGroesse = 8200; //Std. 8192
BufferedReader in = new BufferedReader(new FileReader("C:\\KK.txt"), pufferGroesse);
BufferedWriter out = new BufferedWriter(new FileWriter("C:\\KK_tmp.txt"), pufferGroesse);
String zeile = null;
int anzZeilen=1;
// Zeilenweises auslesen der Datei
while ((zeile = in.readLine()) != null) {
if (anzZeilen != 1) {
//in neue Textdatei schreiben (ohne erste Zeile)
// Nächste Zeile noch prüfen. Warum muss ein String angehängt werden, um die Textdatei zu füllen?
//überträgt nicht alle Daten, wieso?
out.write(zeile+"qwer");
out.newLine();
}
//System.out.println("Zeilen: "+anzZeilen);
anzZeilen++;
}
// Datei schließen
in.close();
Allerdings besteht weiterhin das Problem, dass ich der Write-Methode einen min. 4-Zeichen langen String anhängen muss, damit die Daten geschrieben werden.
Kann mir einer sagen, wie ich das umgehen kann?
Code:
BufferedReader in = new BufferedReader(new FileReader("C:\\KK.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("C:\\KK_tmp.txt"));
String zeile = null;
int anzZeilen=1;
// Zeilenweises auslesen der Datei
while ((zeile = in.readLine()) != null) {
if (anzZeilen != 1) {
//in neue Textdatei schreiben (ohne erste Zeile)
// Nächste Zeile noch prüfen. Warum muss ein String angehängt werden, um die Textdatei zu füllen?
out.write(zeile+"qwer");
out.flush();// schreibt die gepufferten Ausgaben
out.newLine();
}
//System.out.println("Zeilen: "+anzZeilen);
anzZeilen++;
}
// Streams schließen
in.close();
out.close();
"qwer" sind deine 4 Zeichen, was genau kommt ohne sie in die Datei?
erstelle mal eine neue Testdatei mit zwei Buchstaben drin: xy,
und kopiere diese Datei,
was kommt raus ohne "qwer", wie lang ist die neue Datei (File.length)?
wie lang mit "qwer"?
dummerweise ist BufferedOutputStream hier nicht beteiligt (sondern BufferedWriter)
ich will ja keinen Eid drauf schwören, dass nicht doch irgendwo eine Verbindung besteht,
aber ich hab mal eben in der Implementierung geschaut
und nur BufferedWriter, FileWriter + StreamEncoder gefunden,
und die drei machen jedenfalls kein automatisches flush()
edit:
> das gleiche gilt aber für writer:
> Closes the stream, flushing it first