2015-06-09 3 views
1

У меня есть метод, который должен перезаписать текущий файл новым контентом, однако 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 --| 
+1

Зачем использовать что-либо «Файл» в 2015 году? Почему бы вам не использовать 'Files.newBufferedWriter()' с параметрами 'StandardOpenOption. {TRUNCATE_EXISTING, APPEND}'? – fge

+0

И пока мы на нем, вы можете взглянуть на [весь пакет 'nio'] (https://docs.oracle.com/javase/tutorial/essential/io/fileio.html) – Turing85

+0

Dumb вопрос, но закрываете ли вы 'FileWriter'? Незакрытые потоки вызывают все виды поведения на базаре. – initramfs

ответ

0

Я знаю, что это старый вопрос, но у меня была та же проблема в последнее время. Вам нужно очистить 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); 
Смежные вопросы