我有一个文件(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分钟左右得不到正确的回答(在这种情况下,一天有点长)。