我有一个文件(file.txt),我需要清空他当前的内容,然后多次附加一些文本。

示例:file.txt当前内容为:

aaa

bbb

ccc

我想删除此内容,然后第一次追加:

ddd

第二次:

eee

等等...

我试过这个:

```java

// empty the current content

FileWriter fileOut = new FileWriter("file.txt");

fileOut.write("");

fileOut.close();

// append

fileOut = new FileWriter("file.txt", true);

// when I want to write something I just do this multiple times:

fileOut.write("text");

fileOut.flush();

```

这工作正常,但似乎效率低下,因为我打开文件2次只是为了删除当前内容。当您打开文件以使用新文本编写文件时,它将覆盖文件中的任何内容。这样做的好方法是:

```java

// empty the current content

FileWriter fileOut = new FileWriter("file.txt");

fileOut.write("");

fileOut.append("all your text");

fileOut.close();

嗯,实际上,你不需要关闭它并再次打开它。第一个答案是不正确的。如果使用第二个参数的true标志创建新的文件编写器,它将以追加模式打开。这将导致任何write(字符串)命令将"附加"文本"附加"到文件的末尾,而不是删除已存在的任何文本。你阅读我的评论很好,但你最好只编辑上一个问题。答案应该独立存在,没有必要引用"第一"答案,特别是因为stackoverflow没有按顺序排序问题。我尝试这样做,但我没有在答案上看到"添加评论"按钮。有什么我想念的吗?你还没有足够的声誉。我能想到的最好的是:

在Java 8中,你可以使用`FilesnewBufferedWriter()`和`Files.newInputStream()`方法来创建一个可写的文件或流,并在需要时清空或截断它。以下是两种情况的示例:

1. 如果`pathObject`指定的文件是可写的,那么该文件将被截断:

```java

Files.newBufferedWriter(pathObject, StandardOpenOption.TRUNCATE_EXISTING);

```

2. 如果`pathObject`指定的文件是不可写的,但可以删除,那么该文件将被删除:

```java

Files.newBufferedWriter(pathObject, StandardOpenOption.CREATE_NEW);

```

这两种方法都不需要调用`write()`函数,因为它们会自动处理文件的清空和截断操作。这是Java 8中的新功能。

抱歉,我想删除我的答案吗?

不,不用担心。尽管如此,问题仍然可以解决。现在就回答这个问题,同时给其他人留出一些时间来回复。

很好,解决方案已经找到,Pierpaolo :)

@owlstead:为什么不在第一天左右回答自己的问题呢?

@BoltClock:当你打字时,其他人可能正在写答案。他们需要花时间阅读你的回答,想想它是否正确。如果作者过早地发布了内容,这种问题很可能在前30分钟左右得不到正确的回答(在这种情况下,一天有点长)。