[英]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.