码迷,mamicode.com
首页 > 数据库 > 详细

随机读写文件RandomAccessFile

时间:2015-02-27 07:45:27      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:实例

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

随机读写文件RandomAccessFile

标签:实例

原文地址:http://blog.csdn.net/yuluoqianmu/article/details/43963903

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!