为什么我的文件会被覆盖?

时间:2014-01-08 15:39:58

标签: java file-io gson bufferedwriter

我有一个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的每次迭代,文件都会被覆盖。

2 个答案:

答案 0 :(得分:3)

通过将true传递给FileWriter(String fileName, boolean append)构造函数来打开附加模式中的File,以便它不会覆盖现有内容。

  

构造一个FileWriter对象,给定一个带有布尔值的文件名,指示是否附加写入的数据。

  fWriter = new FileWriter(file.getAbsoluteFile(), true);

答案 1 :(得分:0)

因为这是一个更大的for循环,所以每次运行这段代码时,你都会再次打开文件。重新打开文件默认会覆盖它。

在外部循环之外打开文件可能会更好,您将避免此问题。

如果你想像你一样多次打开文件,请使用追加标记,如Suresh所说。