我想写入myFile.txt每次打开程序时调用的文件。如果之前运行的程序中存在具有该名称的文件,我希望它被覆盖。我该如何实现?我读过关于:
RandomAccessFile f = new RandomAccessFile("myFile.txt", "rw");
Run Code Online (Sandbox Code Playgroud)
但这会覆盖现有文件吗?文档没有告诉我是否有。请注意,完整删除旧文件很重要,如果我在当前运行中只覆盖其长度的一半,我不希望它的结尾仍然存在。
编辑: 通过测试,我发现“rw”不会删除现有文件,它只会覆盖文件顶部并保留其余文件。
我找到了满足我需求的替代解决方案:
RandomAccessFile file = new RandomAccessFile("myFile.txt", "rw");
file.setLength(0);
file.write(contentBytes);
Run Code Online (Sandbox Code Playgroud)
但如果可以以更短的方式完成它会很好。
RandomAccessFile没有在打开时删除文件的打开模式。您可以setLength(0)按照您建议的方式调用,在打开后立即截断它。您也可以获取FileChannel并调用truncate(0)它。
如果您RandomAccessFile仅用于编写contentBytes数组,则可以使用 来简化代码FileOutputStream,这会在打开时截断文件(除非您明确请求附加文件):
FileOutputStream fos = new FileOutputStream(f);
fos.write(contentBytes);
Run Code Online (Sandbox Code Playgroud)
我使用 RandomAccessFile 的原因是它允许我获取文件指针的位置,这是我在应用程序中需要的。
您应该能够从以下位置获得位置FileOuputStream:
long pos = fos.getChannel().position();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |