我有一个arraylist(result_arraylist
)和一个使用gson库将java对象转换为JSON然后将其打印到文本文件。这是我的代码:
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();}
我没有在这里展示的是,它嵌套在一个更大的for loop
中,每次迭代都会填充result_arraylist
不同的对象。我的问题是,对于主for loop
的每次迭代,文件都会被覆盖。
答案 0 :(得分:3)
通过将true传递给FileWriter(String fileName,
boolean append)
构造函数来打开附加模式中的File
,以便它不会覆盖现有内容。
构造一个FileWriter对象,给定一个带有布尔值的文件名,指示是否附加写入的数据。
fWriter = new FileWriter(file.getAbsoluteFile(), true);
答案 1 :(得分:0)
因为这是一个更大的for循环,所以每次运行这段代码时,你都会再次打开文件。重新打开文件默认会覆盖它。
在外部循环之外打开文件可能会更好,您将避免此问题。
如果你想像你一样多次打开文件,请使用追加标记,如Suresh所说。