Warum wird meine Datei ständig überschrieben?
-
20-12-2019 - |
Frage
Ich habe eine Arraylist (result_arraylist
) und die Verwendung der GSON-Bibliothek zum Konvertieren von Java-Objekten in JSON und zum anschließenden Drucken in einer Textdatei.Hier ist mein Code:
Gson gson = new Gson();
File file = new File(file_path);
FileWriter fWriter;
BufferedWriter bWriter;
try {
//create the file if it doesn't exist
if((!file.exists())) {
file.createNewFile();
}
fWriter = new FileWriter(file.getAbsoluteFile());
bWriter = new BufferedWriter(fWriter);
for(int j = 0; j < result_arraylist.size(); ++j) {
bWriter.write("<!--"); //this and the last string I write to the file is just to separate the objects for when I read the file again
bWriter.newLine();
bWriter.write(gson.toJson(result_arraylist.get(j))); //take the object at index j, convert it to JSON and write to file
bWriter.newLine();
bWriter.write("-->"); //seperator to denote end of object
bWriter.newLine();
bWriter.newLine();
}
}
catch(IOException e) {e.printStackTrace();}
Was ich hier nicht gezeigt habe, ist, dass dies in einem größeren verschachtelt ist for loop
das füllt result_arraylist
mit unterschiedlichen Objekten bei jeder Iteration.Mein Problem ist das bei jeder Iteration des Hauptteils for loop
, die Datei wird ständig überschrieben.
Lösung
Öffne das File
im Anhängemodus durch Übergabe von true an FileWriter(String fileName,
boolean append)
Konstruktor, damit der vorhandene Inhalt nicht überschrieben wird.
Konstruiert ein FileWriter-Objekt mit einem Dateinamen und einem booleschen Wert, der angibt, ob die geschriebenen Daten angehängt werden sollen oder nicht.
fWriter = new FileWriter(file.getAbsoluteFile(), true);
Andere Tipps
Da sich dies in einer größeren für Schleife befindet, jedes Mal, wenn Sie diesen Codeabschnitt ausführen, öffnen Sie die Datei erneut.Wiedereröffnung einer Datei standardmäßig, um es zu überschreiben.
Es wäre wahrscheinlich besser, die Datei einmal außerhalb der äußeren Schleife zu öffnen, und Sie vermeiden dieses Problem.
Wenn Sie die Datei mehrmals öffnen möchten, wie Sie dies tun, verwenden Sie das Anhängen-Flag als Suresh gesagt.