2014-01-08 3 views
0

У меня есть 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

Код, указанный выше, не будет работать так, как вы описали. Либо у вас есть только одна итерация, либо вы делаете что-то другое, чем ожидаете. Я предлагаю вам выполнить свой код в отладчике, чтобы увидеть, что он действительно делает. –

+0

@PeterLawrey В этом последнем абзаце OP добавила, что весь этот код в for-loop и используя seperator, чтобы знать каждый отдельный json-объект в этом файле. Я не понял? –

ответ

3

Открыть File в режиме добавления, передав true для конструктора FileWriter(String fileName, boolean append), чтобы он не заменил существующий контент.

Создает объект FileWriter с именем файла с логическим значением, указывающим, следует ли добавлять записанные данные.

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

Если бы эта проблема несколько недель назад, и это именно то, что я сделал, чтобы исправить это. +1 –

+0

Спасибо Суреш. Это сработало для меня. – user3015565

+0

@ user3015565 Итак, это означает, что вы пишете только по одному, и вам нужно добавить, чтобы не сбивать предыдущие данные. –

0

Потому что это в большей цикл, каждый раз, когда вы запускаете этот раздел кода вы снова открыть файл. Повторное открытие файла по умолчанию приведет к его перезаписи.

Возможно, было бы лучше открыть файл за пределами внешнего цикла, и вы избежите этой проблемы.

Если вы хотите открыть файл несколько раз, как и вы, используйте флаг добавления, как сказал Суреш.

Смежные вопросы