我有一个文件(file.txt),我需要清空他当前的内容,然后多次附加一些文本。
示例:file.txt当前内容为:
aaa
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次只是为了删除当前内容。
当您打开文件以使用新文本编写文件时,它将覆盖文件中的任何内容。
这样做的好方法是
// empty the current content
fileOut = new FileWriter("file.txt");
fileOut.write("");
fileOut.append("all your text");
fileOut.close();
嗯,实际上,你不需要关闭它并再次打开它。
第一个答案是不正确的。如果使用第二个参数的true标志创建新的文件编写器,它将以追加模式打开。这将导致任何write(字符串)命令将"附加"文本"附加"到文件的末尾,而不是删除已存在的任何文本。
你阅读我的评论很好,但你最好只编辑上一个问题。答案应该独立存在,没有必要引用"第一"答案,特别是因为stackoverflow没有按顺序排序问题。
我尝试这样做,但我没有在答案上看到"添加评论"按钮。有什么我想念的吗?
你还没有足够的声誉。
我能想到的最好的是:
Files.newBufferedWriter(pathObject , StandardOpenOption.TRUNCATE_EXISTING);
和
Files.newInputStream(pathObject , StandardOpenOption.TRUNCATE_EXISTING);
在这两种情况下,如果pathObject中指定的文件是可写的,那么该文件将被截断。
无需调用write()函数。上面的代码足以清空/截断文件。这是java 8中的新功能。
希望能帮助到你
我看到这个问题在很多Java版本之前得到了回答......
从Java 1.7开始,使用新的FileWriter + BufferWriter + PrintWriter进行追加(按照本SO答案中的建议),我建议删除文件然后添加:
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();
我只是傻瓜。
我只需要这样做:
// 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();
并在结束时关闭流。
给stackoverflow留出一些时间来发布Pierpaolo的答案。这是一个"游戏"网站,在第一天左右不回答您自己的问题。
抱歉。我要删除我的答案吗?
不,不管怎样,问题还可以,现在就回答,下次还是留些时间给别人回复。
很好解决,Pierpaolo :)
@owlstead:"在第一天左右不回答你自己的问题"为什么不呢?
@BoltClock嗯,当你打字时,人们正在写答案。他们花时间阅读它,想想它只是为了发现作者过早地发布了一些内容。这种问题不会在前30分钟左右得到正确回答(在这种情况下,可能一天有点长)