2

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

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

啊啊啊

bbb

ccc

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

ddd

第二次:

eee

等等...

我试过这个:

// empty the current content
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 次只是为了删除当前内容。

4

5 回答 5

7

当您打开文件以使用新文本写入时,它将覆盖文件中已有的任何内容。

一个很好的方法是

// empty the current content
fileOut = new FileWriter("file.txt");
fileOut.write("");
fileOut.append("all your text");
fileOut.close();
于 2012-06-27T19:55:49.613 回答
1

第一个答案不正确。如果您为第二个参数创建一个带有 true 标志的新文件写入器,它将以附加模式打开。这将导致任何 write(string) 命令将文本“附加”到文件末尾,而不是清除已经存在的任何文本。

于 2012-06-27T19:58:14.790 回答
1

我只是愚蠢。

我只需要这样做:

// empty the current content
fileOut = new FileWriter("file.txt");

// when I want to write something I just do this multiple times:
fileOut.write("text");
fileOut.flush();

最后关闭流。

于 2012-06-27T20:00:11.863 回答
0

我看到这个问题在很多 Java 版本之前都得到了回答......从 Java 1.7 开始并使用新的 FileWriter + BufferWriter + PrintWriter 进行附加(如this SO answer中所推荐),我对文件擦除然后附加的建议:

FileWriter fw = new FileWriter(myFilePath); //this erases previous content
fw = new FileWriter(myFilePath, true); //this reopens file for appending 
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.println("text"); 
//some code ...
pw.println("more text"); //appends more text 
pw.flush();
pw.close();
于 2016-07-07T19:55:43.617 回答
0

我能想到的最好的是:

Files.newBufferedWriter(pathObject , StandardOpenOption.TRUNCATE_EXISTING);

Files.newInputStream(pathObject , StandardOpenOption.TRUNCATE_EXISTING);

在这两种情况下,如果 pathObject 中指定的文件是可写的,那么该文件将被截断。无需调用 write() 函数。上面的代码足以清空/截断文件。这是 java 8 中的新功能。

希望能帮助到你

于 2017-02-16T19:06:52.333 回答