Java覆盖现有的输出文件

20

我的程序目前正在使用

FileOutputStream output = new FileOutputStream("output", true);

while循环会创建输出文件(如果还没有被创建),并且在每次循环迭代时使用该文件附加一些数据。

 output.write(data).  

这很好,也是我想要的。

如果我再次运行程序,该文件的大小会加倍,因为它将完全相同的信息附加到文件末尾。这不是我想要的。如果我再次运行程序,我希望覆盖该文件。


2
如果无法设置appendfalse,则可以使用File.deleteOnExit()。请勿直接翻译机翻结果。 - Boris the Spider
3个回答

33

这份文档表明你传递的参数是append参数。

函数签名看起来像以下内容

FileOutputStream(File file, boolean append)

由于您不想追加,所以应将该参数设置为false

FileOutputStream output = new FileOutputStream("output", false);

17

如果再次运行程序,我想覆盖文件。

将第二个参数设置为false,以将追加设置为false:

FileOutputStream output = new FileOutputStream("output", false);

请查看构造函数文档

如果第二个参数为true,则字节将被写入文件的末尾而不是开头。


这个有效。虽然我不确定为什么。我原以为将其更改为false会不断覆盖我的循环数据,而不是整个文件,这将是不好的。如果你想解释一下那就太棒了,但也没关系。但是是的,它有效了,谢谢。 - john stamos
1
你可以以追加模式或写入模式打开文件。之后,无论你向文件中写入什么内容,都会按照所选的模式进行操作。模式只能在打开文件时指定。如果下一次想要追加内容,需要先关闭文件,然后再以追加模式重新打开它。 - Rohit Jain
4
默认值是false - YTerle

1

如果文件存在,您可以直接删除该文件,然后始终创建一个新文件,问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接