RandomAccessFile

目录

RandomAccessFile

RandomAccessFile构造器

RandomAccessFile写方法

RandomAccessFile读方法 

记录指针的特殊方法

常见方法


RandomAccessFile

 RandomAccessFile不属于IO流,支持对文件的读取和写入随机访问

public class RandomAccessFile implements DataOutput, DataInput, Closeable

  • DataInput接口中定义了基本数据类型的读操作,例如readInt/readDouble等
  • DataOutput接口定义了基本数据类型的写操作,例如writeInt/writeDouble等

RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,既可以读取文件内容,也 可以向文件输出数据。

RandomAccessFile构造器

RandomAccessFile类在创建对象时,除了指定文件本身,还需要指定一个mode参数指定

RandomAccessFile的访问模式,该参数有如下四个值:

  • r以只读方式打开指定文件。如果试图对该RandomAccessFile指定的文件执行写入方法则会抛出 IOException
  • rw以读取、写入方式打开指定文件。如果该文件不存在,则尝试创建文件
  • rws以读取、写入方式打开指定文件。相对于rw模式,还要求对文件的内容或元数据的每个更新都 同步写入到底层存储设备,默认情形下(rw模式下),是使用buffer的,只有cache满的或者使用 RandomAccessFile.close()关闭流的时候儿才真正的写到文件
  • rwd与rws类似,只是仅对文件的内容同步更新到磁盘,而不修改文件的元数据

RandomAccessFile写方法

RandomAccessFile raf=new RandomAccessFile("d:\\abc.data","rw");
raf.writeInt(1);
raf.writeChars("yanjun");
raf.writeDouble(1234.0/567);
raf.close();
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

RandomAccessFile读方法 

RandomAccessFile raf=new RandomAccessFile("d:/abc.data","r");
int id=raf.readInt();
//String name=raf.readLine();
//byte[] bb=new byte[4];
//raf.readFully(bb);
//String name=new String(bb);
int len=raf.readInt();
StringBuilder sb=new StringBuilder();
for(int i=0;i<len;i++)
sb.append(raf.readChar());
String name=sb.toString();
double salary=raf.readDouble();
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

读取文件时如果到文件结尾是抛出异常EOFException,所以这里采用的是异常用于判断文件结束 典型应用:多线程下载和断点续传

记录指针的特殊方法

与普通的输入/输出流不同的是: RandomAccessFile支持跳到文件任意位置读写数据,

RandomAccessFile对象包含一个记录指针,用以标识当前读写处的位置,当程序创建一个新的 RandomAccessFile对象时,该对象的文件记录指针对于文件头(也就是0处),当读写n个字节后,文件记录指针将会向后移动n个字节。除此之外,RandomAccessFile可以自由移动该记录指针

RandomAccessFile包含两个方法来操作文件记录指针:文件指针是按照字节数进行统计,取值范围为 [0,file.length()]

  • long getFilePointer():返回文件记录指针的当前位置
  • void seek(long pos):将文件记录指针定位到pos位置
  • skipByte(int step); 相对当前位置跳过step个字节

如果文件中间的内容需要进行修改,注意新内容中的字串和原始文件内容的长度应该一致,否则可能会 导致修改数据后面的内容无法正常读取

常见方法

void close() 关闭操作

int read(byte[] b)将内容读取到一个byte数组之中

byte readByte()读取一个字节

int readInt()从文件中读取整型数据… readDouble()等8种简单类型 String readLine()读取一行数据 void writeBytes(String s)将一个字符串写入到文件之中,按字节的方式处理。writeChars void writeInt(int v)将一个int型数据写入文件,长度为4位。…writeDouble等8种类型 创建文件读写学生就业信息 1、数据格式:学号(long没有任何含义,仅仅是一个编号)、姓名(String)、就业单位(String)、就业薪 资(double) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值