我有一个文件(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次只是为了删除当前内容。
答案 0 :(得分:7)
当你打开文件用新文本写它时,它会覆盖文件中的任何内容。
这样做的好方法是
// empty the current content
fileOut = new FileWriter("file.txt");
fileOut.write("");
fileOut.append("all your text");
fileOut.close();
答案 1 :(得分:1)
第一个答案是不正确的。如果使用第二个参数的true标志创建新的文件编写器,它将以追加模式打开。这将导致任何write(字符串)命令将文本“附加”到文件末尾,而不是删除已存在的文本。
答案 2 :(得分:0)
我只是愚蠢。
我只需要这样做:
// 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();
最后关闭了小溪。
答案 3 :(得分: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();
答案 4 :(得分:0)
我能想到的最好的是:
$environment = Register-Environment -EnvironmentName $environmentName -EnvironmentSpecification $environmentName -UserName $adminUserName -Password $adminPassword -WinRmProtocol $protocol -TestCertificate ($testCertificate -eq "true") -Connection $connection -TaskContext $distributedTaskContext -ResourceFilter $machineFilter
和
Files.newBufferedWriter(pathObject , StandardOpenOption.TRUNCATE_EXISTING);
在两种情况下,如果pathObject中指定的文件是可写的,那么该文件将被截断。 无需调用write()函数。上面的代码足以清空/截断文件。这是java 8中的新功能。
希望它有助于