繁体   English   中英

如何附加到RandomAccessFile?每次运行此代码时,数据都会被覆盖

[英]How do I append to a RandomAccessFile? Every time I run this code, the data get overwritten

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

    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();
    }

在你写作之前, seek文件的末尾; 第一个通话length 我也更喜欢try-with-resources 喜欢,

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();
}

添加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是应创建新文件还是附加到现有文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM