RandomAccessFile()的哪种模式会覆盖现有文件?

时间:2018-02-04 18:23:52

标签: java

每次打开程序时,我都想写一个名为myFile.txt的文件。如果存在具有该程序的先前运行中具有该名称的文件,则我希望它被覆盖。我该如何做到这一点?我读过:

RandomAccessFile f = new RandomAccessFile("myFile.txt", "rw");

但是这会覆盖现有文件吗?文档没有告诉我它是否存在。请注意,将旧文件全部删除非常重要,如果我只在当前运行中覆盖其一半长度,我也不希望它的结尾仍然存在。

修改 通过测试,我发现" rw"不会删除现有文件,它只会覆盖文件顶部并保留其余部分。

我找到了另一种解决方案来满足我的需求:

    RandomAccessFile file = new RandomAccessFile("myFile.txt", "rw");
    file.setLength(0);
    file.write(contentBytes);

但如果能够以更短的方式做到这一点会很好。

1 个答案:

答案 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