全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java使用RandomAccessFile类对文件进行读写

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 


相关文章: 小程序网站制作需要准备什么资料,如何制作小程序?  如何在IIS中新建站点并解决端口绑定冲突?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  全景视频制作网站有哪些,全景图怎么做成网页?  如何在阿里云虚拟主机上快速搭建个人网站?  建站之星后台管理如何实现高效配置?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何用免费手机建站系统零基础打造专业网站?  如何用wdcp快速搭建高效网站?  网站制作新手教程,新手建设一个网站需要注意些什么?  建站10G流量真的够用吗?如何应对访问高峰?  建站主机系统SEO优化与智能配置核心关键词操作指南  建站之星如何开启自定义404页面避免用户流失?  临沂网站制作企业,临沂第三中学官方网站?  如何确保FTP站点访问权限与数据传输安全?  如何在IIS中新建站点并配置端口与IP地址?  建站主机如何选?性能与价格怎样平衡?  外贸公司网站制作哪家好,maersk船公司官网?  如何在企业微信快速生成手机电脑官网?  如何在云主机上快速搭建网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站之星各版本价格是多少?  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速查询域名建站关键信息?  英语简历制作免费网站推荐,如何将简历翻译成英文?  个人网站制作流程图片大全,个人网站如何注销?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  自助网站制作软件,个人如何自助建网站?  宁波免费建站如何选择可靠模板与平台?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  电商网站制作公司有哪些,1688网是什么意思?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  Swift中swift中的switch 语句  魔毅自助建站系统:模板定制与SEO优化一键生成指南  ,sp开头的版面叫什么?  建站主机选哪种环境更利于SEO优化?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  网站企业制作流程,用什么语言做企业网站比较好?  如何在服务器上配置二级域名建站?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  深圳网站制作培训,深圳哪些招聘网站比较好?  网站制作企业,网站的banner和导航栏是指什么?  公众号网站制作网页,微信公众号怎么制作?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  上海网站制作开发公司,上海买房比较好的网站有哪些?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。