FileWriter() будет только добавлять, а не перезаписывать

У меня есть метод, который должен перезаписывать текущий файл новым содержимым, однако FileWriter() только добавляет новый контент, а не перезаписывает старый.

Вот как настроен мой FileWriter

File file = new File(test.txt);
BufferedWriter out;
out = new BufferedWriter(new FileWriter(file, false));

Вот метод сохранения

//stuff is defined earlier and filled with the new content for the file
ArrayList<String> stuff = new ArrayList<>();

//The actual save() method
Object[] lines = stuff.toArray();
for (Object item : lines) {
    out.write(item.toString());
    out.newLine();
}
out.flush();

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

Что я хочу:

line 1
line 2
line 3 <--------- This is added when the file is overwritten

Что происходит:

line 1
line 2
line 1 --|
line 2   |------ This was all re-appended to the original 1st 2 lines
line 3 --|

person irishpatrick    schedule 09.06.2015    source источник
comment
Зачем использовать что-то File в 2015 году? Почему бы вам не использовать Files.newBufferedWriter() с опциями StandardOpenOption.{TRUNCATE_EXISTING,APPEND}?   -  person fge    schedule 09.06.2015
comment
И пока мы этим занимаемся, вы можете взглянуть на весь nio пакет   -  person Turing85    schedule 09.06.2015
comment
Глупый вопрос, но вы когда-нибудь закрывали FileWriter? Незакрытые потоки вызывают разного рода базарное поведение.   -  person initramfs    schedule 09.06.2015
comment
Why use anything File in 2015? Почему бы и нет, если он все еще работает.   -  person Antoniossss    schedule 09.06.2015


Ответы (1)


Я знаю, что это старый вопрос, но недавно у меня была такая же проблема. Вам нужно очистить свой ArrayList, содержащий выходные данные, иначе новые данные будут просто добавлены к старым. Я использую StringBuilder:

    StringBuilder moduleData = new StringBuilder();
    moduleData.append("--target_perm_group_size\t").append(targetGroupSize).append("\n");
    moduleData.append("--prog_check\t").append(progCheck).append("\n");

    FileSaveUtility.fileSaveWindow(moduleData.toString());
    moduleData.setLength(0);
person Dennis Simpson    schedule 17.07.2016