RandomAccessFile类是Java Io体系中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile类支持“随机访问”方式,这里的“随机”是指程序可以直接跳到文件的任意位置来读写数据。
RandomAccessFile用两个方法来操作文件记录指针:
1 long getFilePointer():返回文件记录指针的当前位置 2 void seek(long pos):将文件记录指针定位到pos位置
RandomAccessFile有两个构造器:
1 RandomAccessFile(File file , String mode) //创建文件流,文件属性由参数File对象指定 2 RandomAccessFile(String name , String mode) //创建文件流,文件名由参数name指定
除了指定文件以外,还需要指定一个mode参数,该参数指定RandomAccessFile的访问模式,该参数有如下四个值:
1 r:以只读方式打开指定文件。如果试图对该RandomAccessFile指定的文件执行写入方法则会抛出IOException 2 rw:以读取、写入方式打开指定文件。如果该文件不存在,则尝试创建文件 3 rws:以读取、写入方式打开指定文件。相对于rw模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备,默认情形下(rw模式下),是使用buffer的,只有cache满的或者使用RandomAccessFile.close()关闭流的时候儿才真正的写到文件 4 rwd:与rws类似,只是仅对文件的内容同步更新到磁盘,而不修改文件的元数据
RandomAccessFile类的主要方法:
1 void write(int d) 向文件中写入1个字节,写入的是传入的int值对应二进制的低8位; 2 int read() 读取1个字节,并以int形式返回,如果返回-1则代表已到文件末尾; 3 int read(byte[] data) 一次性从文件中读取字节数组总长度的字节量,并存入到该字节数组中,返回的int值代表读入的总字节数,如果返回-1则代表未读取到任何数据。通常字节数组的长度可以指定为1024*10(大概10Kb的样子,效率比较好); 4 int read(byte[] data, int off, int len) 一次性从文件中读取最多len个字节,并存入到data数组中,从下标off处开始; 5 void write(int b) 往文件中写入1个字节的内容,所写的内容为传入的int值对应二进制的低8位; 6 write(byte b[]) 往文件中写入一个字节数组的内容; 7 write(byte b[], int off, int len) 往文件中写入从数组b的下标off开始len个字节的内容; 8 seek(long pos) 设置文件指针偏移量为指定值,即在文件内移动至新的位置; 9 long getFilePointer() 获取文件指针的当前位置; 10 void close() 关闭RandomAccessFile;