当前位置: 首页 > 知识库问答 >
问题:

FileWriter()将仅追加,而不是覆盖

危宜
2023-03-14

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

呼延俊良
2023-03-14

我知道这是一个老问题,但我最近遇到了同样的问题。您需要清除包含输出数据的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);
 类似资料:
  • 问题内容: 好的,在将多行写入文本文件时遇到麻烦。 该程序运行,但是不会每次都使用新行 当我希望它运行4次时,文本文件应如下所示: 相反,它看起来像: 谁知道如何解决这个问题?所有导入均正确导入。 来源(经过略微编辑,假设所有内容均已正确定义): 问题答案: 确保在创建的实例时要附加到其末尾。这可以通过使用此特定的构造函数来完成,该构造函数将其他参数作为第二个参数。这告诉追加到文件末尾,而不是覆盖

  • 我正在运行一个由Kafka、Spark和Cassandra组成的1节点集群。全部本地在同一台机器上。 从一个简单的Python脚本中,我每5秒将一些虚拟数据流到一个Kafka主题中。然后使用Spark结构化流,我将这个数据流(一次一行)读入PySpark DataFrame中,并使用=。最后,我尝试将此行追加到一个已经存在的Cassandra表中。 我一直在关注(如何向Cassandra编写流数据

  • 问题内容: 我使用了下面的jQuery 示例 ,它的工作原理就像一个魅力。但是,它会附加结果。我需要更改什么以替换结果而不是附加结果? 问题答案: 您可以在追加之前清空元素 或使用方法

  • 我正在使用为我的两个测试生成报告。我正在从事selenium、java、testng、cucumber和maven项目。我的cucumberOptions中有两个TestRunner文件,我使用。当我只运行一个TestRunner时,数据块报告会按预期生成。但是,当我一个接一个地运行两个TestRunner时,第二个测试生成的区段报告将覆盖第一个测试生成的区段报告。如何将第二个测试生成的Exten

  • 问题内容: 我有以下代码: 我想用新内容替换文件中的旧内容。但是,当我执行代码时,将附加文件“ test.xml”,即,我的旧内容被新的“替换”内容所取代。为了删除旧内容而只保留新内容,我该怎么办? 问题答案: 您需要先写入文件的开头,然后再使用(如果要进行就地替换): 另一种方法是读取文件,然后使用再次打开它: 无论是也将改变inode的文件的数量(我测试过两次,一次是与Ubuntu 12.04

  • 问题内容: 我正在使用Json.Net for .Net 4.5,并且在以下对象上使用填充对象时,它会使用json的内容而不是设置其值来增加List的值。 Json.Net 类 当它们最初加载时,一切都正确,但是从JSON重新加载两个MyStringLists都是重复的 问题答案: 您应该告诉Json.Net替换数组,如下所示: