FileWriter() 只会追加,不会覆盖

Posted

技术标签:

【中文标题】FileWriter() 只会追加,不会覆盖【英文标题】:FileWriter() will only append, not overwrite 【发布时间】:2015-08-24 16:38:22 【问题描述】:

我有一个方法应该用新内容覆盖当前文件,但是 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 --|

【问题讨论】:

为什么在 2015 年使用任何东西 File?为什么不使用 Files.newBufferedWriter() 和选项 StandardOpenOption.TRUNCATE_EXISTING,APPEND 当我们在做的时候,你可能想看看the whole nio package 愚蠢的问题,但你有没有关闭过FileWriter?未关闭的流会导致各种集市行为。 Why use anything File in 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);

【讨论】:

以上是关于FileWriter() 只会追加,不会覆盖的主要内容,如果未能解决你的问题,请参考以下文章

JAVA基础复习- 字符流FileWriter

[Java]PrintWriter&FileWriter 写入追加到文件

java基础---IO流

输入输出流的一些细节问题

Java FileWriter 覆盖

FileWriter和BufferedWriter之间的Java区别