Java使用RandomAccessFile类对文件进行读写
发布时间 - 2026-01-11 00:41:42 点击率:次1. RandomAccessFile类简介

前面一篇随笔《File类遍历目录及文件》中有说到,File类只能用于表示文件或目录的名称、大小等信息,而不能用于文件内容的访问。而当需要访问文件内容时,就可以用RandomAccessFile类了。
RandomAccessFile是Java提供用来访问一些保存数据记录的文件的类,可以进行读取操作,也可以进行写入操作,写入的数据则以byte的形式存储;支持随机访问,也就是可以访问文件的任意位置(通过文件指针实现)。
2. 构造函数
RandomAccessFile(String name, String mode) RandomAccessFile(File file, String mode)
两个构造函数用法非常相似,name、file都是用于指定打开的文件路径和名称,mode则是指定打开文件的方式,常用的参数有两个"r"和"rw",也就是只读和读写。
文件打开后,文件指针指向文件最开始,也就是pointer=0,可通过RandomAccessFile了的getFilePointer()方法查看。
范例: 创建并打开一个数据文件。
//创建目录
File dir = new File("demo");
if (!dir.exists()) {
dir.mkdir();
}
//创建文件
File file = new File(dir, "test.dat");
if (!file.exists()) {
file.createNewFile();
}
//实例化RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//打开文件时指针位置在最前,即0
System.out.println(raf.getFilePointer());
3. 写入操作
write(int i) write(byte[] b) write(byte[] b, int off, int len)
第三个方法中的off为数组b中需要写入的数据的起始索引值,len则是要写入的长度。write方法每次写入一个字节,如果写入的数据超过一个字节,则写入后八位(如果这里不太理解,可看看:二进制运算基础)。
另外,每写入一个字节,文件指针指向下一个字节。
范例: 通过write()方法向文件中写入一个整型数。(沿用上面例子创建的对象)
//write()方法每次只插入一个字节,大于一个字节的则写入后八位,因此写入一个整型数需要写入四次 int num = 28; raf.write(num >>> 24); raf.write(num >>> 16); raf.write(num >>> 8); raf.write(num);
当然,RandomAccessFile类也提供了更简便的方法writeXxx(),如果插入一个整型,可直接writeInt(i);,boolean的则为writeBoolean(),以此类推。但是要清楚的是,这些方法的还是通过上面的write()方法实现的。
范例: 以下为RandomAccessFile类中writeInt()方法的方法体。
public final void writeInt(int v) throws IOException {
write((v >>> 24) & xFF);
write((v >>> 16) & xFF);
write((v >>> 8) & xFF);
write((v >>> 0) & xFF);
//written += 4;
}
4. 读取操作
read(int i) read(byte[] b) read(byte[] b, int off, int len)
与写入操作类似,读取操作是通过read()方法实现的,每次读取一个字节,同时文件指针指向下一个位置(通过seek()方法将指针移到读取位置)。同时,RandomAccessFile类也封装了readXxx()系列方法用于简便读取,原理和使用方法可参考写入操作,基本类似。
范例: 将数据文件中的所有数据以整型形式读取出来。
//读取文件,在读取前需要通过seek()方法把文件指针移到最前
raf.seek(0);
for (int i = 0; i*4 < raf.length(); i++) {
System.out.println(raf.readInt());
}
5. 关闭文件
打开的文件一定要通过close()关闭,否则可能会出现不可预料的错误。
6. 完整例子
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class MyRandomAccessFile {
public static void main(String[] args) throws IOException {
//创建目录
File dir = new File("demo");
if (!dir.exists()) {
dir.mkdir();
}
//创建文件
File file = new File(dir, "test.dat");
if (!file.exists()) {
file.createNewFile();
}
//实例化RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//打开文件时指针位置在最前,即0
System.out.println(raf.getFilePointer());
//写入数据
int[] num = {28, 14, 56, 23, 98};
for (int i : num) {
raf.writeInt(i);
}
//读取文件,在读取前需要通过seek()方法把文件指针移到最前
raf.seek(0);
for (int i = 0; i*4 < raf.length(); i++) {
System.out.println(raf.readInt());
}
//操作结束后一定要关闭文件
raf.close();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# RandomAccessFile读写
# Java
# RandomAccessFile
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
简历没回改:利用AI润色让你的文字更专业
如何在云服务器上快速搭建个人网站?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
音响网站制作视频教程,隆霸音响官方网站?
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何快速搭建二级域名独立网站?
如何在新浪SAE免费搭建个人博客?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何用IIS7快速搭建并优化网站站点?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何快速重置建站主机并恢复默认配置?
做企业网站制作流程,企业网站制作基本流程有哪些?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
英语简历制作免费网站推荐,如何将简历翻译成英文?
Java垃圾回收器的方法和原理总结
PythonWeb开发入门教程_Flask快速构建Web应用
Python函数文档自动校验_规范解析【教程】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
网页设计与网站制作内容,怎样注册网站?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel如何使用.env文件管理环境变量?(最佳实践)
浅述节点的创建及常见功能的实现
如何用景安虚拟主机手机版绑定域名建站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
轻松掌握MySQL函数中的last_insert_id()
如何在景安服务器上快速搭建个人网站?
javascript日期怎么处理_如何格式化输出
C++时间戳转换成日期时间的步骤和示例代码
用yum安装MySQLdb模块的步骤方法
如何在香港服务器上快速搭建免备案网站?
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在Windows服务器上快速搭建网站?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何在腾讯云服务器上快速搭建个人网站?
免费网站制作appp,免费制作app哪个平台好?
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
香港服务器租用费用高吗?如何避免常见误区?

