randomaccessfile 是 java 中支持随机读写的文件操作类,可通过 seek 定位、基本类型及 utf-8 字符串读写,需用 try-with-resources 确保关闭。

RandomAccessFile 是 Java 中用于随机访问文件的类,它既支持读也支持写,并且可以自由定位到文件任意位置(类似 C 的 fseek),适合处理需要频繁跳转读写的场景,比如日志截断、数据库文件、二进制配置等。
构造 RandomAccessFile 实例
创建对象时需指定文件路径和访问模式:
- "r":只读模式,文件必须存在,否则抛出 FileNotFoundException
- "rw":读写模式,文件不存在会自动创建;存在则保留原内容,可读可写
- "rws":同 "rw",但每次写入都强制同步到磁盘(含元数据)
- "rwd":同 "rw",但仅保证写入的数据同步到磁盘(不强制元数据)
示例:
RandomAccessFile raf = new RandomAccessFile("data.bin", "rw");
定位与移动文件指针
通过 getFilePointer() 获取当前偏移量,用 seek(long pos) 跳转到指定字节位置(从 0 开始):
- seek(0) 表示回到文件开头
- seek(raf.length()) 表示移到末尾(适合追加)
- seek 超出当前长度不会报错,后续写入会在该位置开始,中间空缺部分补 0(对普通文件有效)
注意:seek 不会改变文件长度,只有写入操作才可能扩展文件。
通过 yarn-threads-cli 与 Threads(Meta)交互。当用户想要阅读首页动态、点赞、收藏的帖子或特定帖子时使用;查看...
读写基本类型和字符串
RandomAccessFile 提供了对应 Java 基本类型的读写方法(如 writeInt、readDouble),所有数值按大端序(network byte order)存储:
- writeInt(123) 写入 4 字节;readInt() 按顺序读取并还原为 int
- writeUTF(String) 使用修改版 UTF-8 编码(含 2 字节长度前缀),readUTF() 需要匹配使用
- writeBytes(String) 按单字节写入每个 char 的低 8 位(会丢数据,不推荐)
- writeChars(String) 每个 char 写入 2 字节(高位在前),readChars() 可还原
示例(写入结构化数据):
raf.seek(100); // 跳到第 100 字节
raf.writeInt(42); // 写入 int
raf.writeDouble(3.1415); // 写入 double
raf.writeUTF("hello"); // 写入带长度前缀的 UTF-8 字符串
关闭与异常处理
使用完必须调用 close(),否则资源泄漏,且未 flush 的写入可能丢失(尤其 rws/rwd 模式下更需确保 close):
- 建议用 try-with-resources(JDK 7+)自动关闭
- IO 操作抛出 IOException,需捕获或声明抛出
推荐写法:
try (RandomAccessFile raf = new RandomAccessFile("data.bin", "rw")) {
raf.seek(0);
int value = raf.readInt();
System.out.println(value);
} catch (IOException e) {
e.printStackTrace();
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










