• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java使用RandomAccessFile类对文件进行读写

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

作者:Joah 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Joah 通过本文主要向大家介绍了randomaccessfile类,randomaccessfile,randomaccessfile用法,randomaccessfile乱码,randomaccessfile api等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1. RandomAccessFile类简介

前面一篇随笔《File类遍历目录及文件》中有说到,File类只能用于表示文件或目录的名称、大小等信息,而不能用于文件内容的访问。而当需要访问文件内容时,就可以用RandomAccessFile类了。

RandomAccessFile是Java提供用来访问一些保存数据记录的文件的类,可以进行读取操作,也可以进行写入操作,写入的数据则以byte的形式存储;支持随机访问,也就是可以访问文件的任意位置(通过文件指针实现)。

2. 构造函数

RandomAccessFile(String name, String mode)
RandomAccessFile(File file, String mode)
</div>

两个构造函数用法非常相似,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());
</div>

3. 写入操作

write(int i)
write(byte[] b)
write(byte[] b, int off, int len)
</div>

第三个方法中的off为数组b中需要写入的数据的起始索引值,len则是要写入的长度。write方法每次写入一个字节,如果写入的数据超过一个字节,则写入后八位(如果这里不太理解,可看看:二进制运算基础)。

另外,每写入一个字节,文件指针指向下一个字节。

范例: 通过write()方法向文件中写入一个整型数。(沿用上面例子创建的对象)

//write()方法每次只插入一个字节,大于一个字节的则写入后八位,因此写入一个整型数需要写入四次
int num = 28;
raf.write(num >>> 24);
raf.write(num >>> 16);
raf.write(num >>> 8);
raf.write(num);
</div>

当然,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;
}
</div>

4. 读取操作

read(int i)
read(byte[] b)
read(byte[] b, int off, int len)
</div>

与写入操作类似,读取操作是通过read()方法实现的,每次读取一个字节,同时文件指针指向下一个位置(通过seek()方法将指针移到读取位置)。同时,RandomAccessFile类也封装了readXxx()系列方法用于简便读取,原理和使用方法可参考写入操作,基本类似。

范例: 将数据文件中的所有数据以整型形式读取出来。

//读取文件,在读取前需要通过seek()方法把文件指针移到最前
raf.seek(0);
for (int i = 0; i*4 < raf.length(); i++) {
  System.out.println(raf.readInt());
}
</div>

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • RandomAccessFile简介_动力节点Java学院整理
  • Java中IO流 RandomAccessFile类实例详解
  • Java使用RandomAccessFile类对文件进行读写
  • RandomAccessFile简介_动力节点Java学院整理
  • Java中IO流 RandomAccessFile类实例详解
  • Java使用RandomAccessFile类对文件进行读写

相关文章

  • 2017-05-28Spring Boot(五)之跨域、自定义查询及分页
  • 2017-05-28java 中List删除实例详解
  • 2017-05-28Spring Boot 集成Dubbo框架实例
  • 2017-05-28java反射总结实例详解
  • 2017-05-28spring boot装载自定义yml文件
  • 2017-05-28详解使用Spring Boot开发Restful程序
  • 2017-05-28springboot集成activemq的实例代码
  • 2017-05-28Swing图形界面实现可动态刷新的验证码
  • 2017-09-06Nashorn jdk8新增的ScriptEngine官方文档翻译及代码示例
  • 2017-05-28深入理解java异常处理机制的原理和开发应用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • JAVAEE中用Session简单实现购物车功能示例代码
    • Java中IO流 字节流实例详解
    • 详解Java 自动装箱与拆箱的实现原理
    • Java枚举_动力节点Java学院整理
    • java中Collection对象的使用
    • Spring Hibernate实现分页功能
    • Java多线程下载文件实例详解
    • Struts2实现文件上传时显示进度条功能
    • Spring Boot 简介(入门篇)
    • java读取txt文件代码片段

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有