gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:49:15 25 4
gpt4 key购买 nike

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

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

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

编辑:通过测试我发现“rw”不会删除现有文件,它只会覆盖文件的顶部并保留其余部分。

我找到了满足我需求的替代解决方案:

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

但如果能以更短的方式做到这一点就好了。

最佳答案

RandomAccessFile 没有在打开时删除文件的打开模式。您可以按照您建议的方式调用 setLength(0) 打开后立即截断它。您还可以获得 FileChannel 并对其调用 truncate(0)

如果您使用 RandomAccessFile 仅写入 contentBytes 数组,您可以使用 FileOutputStream 来简化您的代码,它会在打开时截断文件 (除非您明确要求附加文件):

FileOutputStream fos = new FileOutputStream(f);
fos.write(contentBytes);

The reason I use RandomAccessFile is that is allows me to get the position of the file pointer, which I need in my application.

您应该能够像这样从 FileOuputStream 获取位置:

long pos = fos.getChannel().position();

关于java - RandomAccessFile() 的哪种模式会覆盖现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48611554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com