每次打开程序时,我都想写一个名为myFile.txt
的文件。如果存在具有该程序的先前运行中具有该名称的文件,则我希望它被覆盖。我该如何做到这一点?我读过:
RandomAccessFile f = new RandomAccessFile("myFile.txt", "rw");
但是这会覆盖现有文件吗?文档没有告诉我它是否存在。请注意,将旧文件全部删除非常重要,如果我只在当前运行中覆盖其一半长度,我也不希望它的结尾仍然存在。
修改 通过测试,我发现" rw"不会删除现有文件,它只会覆盖文件顶部并保留其余部分。
我找到了另一种解决方案来满足我的需求:
RandomAccessFile file = new RandomAccessFile("myFile.txt", "rw");
file.setLength(0);
file.write(contentBytes);
但如果能够以更短的方式做到这一点会很好。
答案 0 :(得分:3)
RandomAccessFile
没有打开模式,可以在打开时删除文件。您可以按照建议的方式拨打setLength(0)
,在打开后立即将其截断。您也可以获取FileChannel
并在其上调用truncate(0)
。
如果仅使用RandomAccessFile
编写contentBytes
数组,则可以使用FileOutputStream
来简化代码,FileOutputStream fos = new FileOutputStream(f);
fos.write(contentBytes);
会在打开时截断文件(除非您明确请求文件追加):< / p>
FileOuputStream
我使用RandomAccessFile的原因是允许我获取文件指针的位置,这在我的应用程序中是需要的。
你应该可以从long pos = fos.getChannel().position();
得到这样的位置:
forEach