A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


RandomAccessFile不算是IO体系中的子类,而是直接继承Object。但是它是IO包中的成员,因为它具备读写功能,它内部封装了一个数组,而且通过指针对数组进行操作,可以通过getFilePointer获取指针的位置,也可以通过seek改变指针的位置
RandomAccessFile完成读写的原理是其内部封装了字节流
通过构造函数我们可以看出,该类只能操作文件,而且操作文件还有模式(r,rw等)
r模式:如果文件不存在会报错
rw模式:如果文件不存在会创建,如果已经存在,不会覆盖

package third;

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo {
    public static void main(String[] args) {
        try {
            writeFile();
            readFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void writeFile() throws IOException {
        RandomAccessFile raf=new RandomAccessFile("E:\\raf.txt", "rw");
        raf.write("李四".getBytes());
        raf.writeInt(99);
        raf.write("王五".getBytes());
        raf.writeInt(100);
        raf.seek(8*4);
        raf.write("张三".getBytes());
        raf.writeInt(103);
        raf.close();
    }
    public static void readFile() throws IOException {
        RandomAccessFile raf=new RandomAccessFile("E:\\raf.txt", "r");
        raf.seek(8*1);//下面去了第二个人的,指针移动到第八位,
        //当然也可以用skipByte(8),往后跳过多少
        byte[]b=new byte[4];
        raf.read(b);
        System.out.println(new String(b));
        System.out.println(raf.readInt());
        raf.close();
    }
}

注:RandomAccessFile可以对文件的任意位置进行操作,这就意味着我们可以使用多线程同时操作一个文件,像可以多线程下载等

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马