随机读写文件RandomAccessFile

RandomAccessFile类用于随机访问文件,自身具备读和写的方法,通过skipBytes(int x),seek(int x)方法来达到随机访问的目的。
RandomAccessFile类的实例支持对随机访问文件的读取和写入。
随机访问文件的行为类似于存储在文件系统中的一个大型byte数组。存在指向隐函数组的光标或索引,称为文件指针。
该类不算是IO体系中的子类,因为该类直接继承自Object类,但是它是IO包中的成员,因为它具备读和写的功能。在内部封装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针位置,同时可以通过seek方法来改变指针的位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过RandomAccessFile的构造函数我们可以看出:该类只能操作文件而且操作文件还有模式。
RandomAccessFile对象的构造函数要操作的文件不存在会自动创建文件,如果存在则不会覆盖已有的文件。如果模式为只读r,则不会创建文件,而是会去读取一个已经存在的文件,如果该文件存在,则会出现异常;如果模式为rw,操作的文件不存在,则会自动创建文件,如果存在,则不会覆盖该文件。

RandomAccessFile的实际应用:将文件分段写入,一个线程对应一段,是文件多线程下载的原理
示例:

public void writeFile() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
    raf.write("李四".getBytes());
    raf.writeInt(255);
    raf.close();
}
public void readFile() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","r");
    byte[] buf = new byte[4];
    raf.read(buf);
    int num = raf.readInt();
    raf.close();
}
public void writeFile2() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
    raf.seek(8*3);//调整对象中的指针
    raf.skipBytes(8);//跳过指定的字节数,但是不能往回跳
    raf.write("zhangsan".getBytes());
    raf.writeInt(90);
    raf.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值