如何清空文件内容,然后多次附加文本

时间:2012-06-27 19:49:28

标签: java file-io

我有一个文件(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次只是为了删除当前内容。

5 个答案:

答案 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中的新功能。

希望它有助于