Java 如何附加到随机访问文件?每次我运行这段代码时,数据都会被覆盖

Java 如何附加到随机访问文件?每次我运行这段代码时,数据都会被覆盖,java,Java,如何使用此代码片段附加数据?每次运行代码时,数据总是被覆盖。 try{ RandomAccessFile fileWriter = new RandomAccessFile("Officers.txt", "rw"); fileWriter.writeUTF(officerObject.getOfficerBadgeNum()); fileWriter.writeUTF(officerObject.getOfficerFirstName(

如何使用此代码片段附加数据?每次运行代码时,数据总是被覆盖。

    try{
        RandomAccessFile fileWriter = new RandomAccessFile("Officers.txt", "rw");

        fileWriter.writeUTF(officerObject.getOfficerBadgeNum());
        fileWriter.writeUTF(officerObject.getOfficerFirstName());
        fileWriter.writeUTF(officerObject.getOfficerLastName());
        fileWriter.writeUTF(officerObject.getOfficerPrecint());

        fileWriter.close();
        System.out.println("Data Successfully Saved");
    }
    catch (IOException e) {
        System.out.println("Error in File. Could not SAVE Officer");
        e.printStackTrace();
    }
添加skipBytes()以转到文件末尾,如下所示

尝试以下方法:

RandomAccessFile fileWriter = new RandomAccessFile("Officers.txt", "rw");

        fileWriter.writeUTF(officerObject.getOfficerBadgeNum());
fileWriter.skipBytes( (int)fileWriter.length() );
        fileWriter.writeUTF(officerObject.getOfficerFirstName());
.
.
在写入之前,将其添加到文件的末尾;第一个电话。我还想买一辆。像


RandomAccessFile的目的是访问文件中任意位置的数据。为了实现这一点,有一个内部指针确定下一个字节将写入的位置。该指针默认为0

因此,正如其他人所写,你首先要寻找文件的结尾;否则写操作将转到该文件的开头

但这里真正的要点是:根据您的需求,您可能不需要使用RandomAccessFile。一个简单的FileWriter将完成这项工作(当您只想附加到该文件时)。当然,当您的主要需求是“轻松”编写UTF8时,RandomAccessFile可能是您的首选


您可以看到,在创建普通FileWriter对象时,有一个布尔标志,用于确定FileWriter应该创建新文件还是附加到现有文件

我希望能对否决票发表评论,因为我实在看不出我的答案有什么问题。我同意,但如果他使用
FileWriter
,他就不能使用
writeUTF()
FileWriter
几乎总是错误的选择,因为它总是使用默认编码。另外,请注意,
writeUTF
并不是简单地将字符串写为UTF-8;它预先设定了字符串的长度;等效的操作是
DataOutputStream.writeUTF
。谢谢。这些解释比未加注释的否决票更有意义。这可能会增强以后的答案。
try (RandomAccessFile fileWriter = new RandomAccessFile("Officers.txt", "rw")) {
    fileWriter.seek(fileWriter.length());
    fileWriter.writeUTF(officerObject.getOfficerBadgeNum());
    fileWriter.writeUTF(officerObject.getOfficerFirstName());
    fileWriter.writeUTF(officerObject.getOfficerLastName());
    fileWriter.writeUTF(officerObject.getOfficerPrecint());
    System.out.println("Data Successfully Saved");
} catch (IOException e) {
    System.out.println("Error writing File. Could not SAVE Officer");
    e.printStackTrace();
}