JavaSE笔记15.13-IO流-RandomAccessFile
一. 概述
public class RandomAccessFile extends Object
- 该类的实例支持读取和写入随机访问文件
- 该类不是IO体系中的子类,而是直接继承自Object;但它是IO包中的成员,因为它具备读和写的功能(具备读写功能的原理是,其内部封装了字节输入流和字节输出流)
- 内部封装了一个数组,可以通过指针对数组的元素进行操作
二. 构造方法
通过构造方法可以看出,该类只能操作文件
//创建一个随机访问文件流,从File参数指定的文件中读取,并可选择写入文件
RamdomAccessFile(File file,String mode);
//创建一个随机访问文件流,从指定名称的文件中读取,并可选择写入文件
RandomAccessFile(String name,String mode);
mode参数指定用以打开文件的访问模式,允许的值及其含义为:
- r:以只读方式打开。不会创建文件,会去读取一个已存在的文件。如果文件不存在,则会出现异常。
- rw:打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件,如果存在则会覆盖。
三. 操作内部指针的方法
//获取指针位置(返回此文件中的当前偏移量)
long getFilePointer();
//改变指针位置(设置文件指针偏移)
void seek(long pos);
四. 例子
import java.io.*;
public class RandomAccessFileDemo {
public static void main(String[] args) throws IOException {
writeFile();
readFile();
}
public static void writeFile() throws IOException {
RandomAccessFile raf=new RandomAccessFile("C://ran.txt","rw");
raf.write("李王".getBytes());
raf.writeInt(97);
raf.write("王五".getBytes());
raf.writeInt(99);
raf.close();
}
public static void readFile() throws IOException {
RandomAccessFile raf=new RandomAccessFile("C:\\ran.txt","r");
//调整对象中的指针
raf.seek(10);
byte[] buf=new byte[6];
raf.read(buf);
String name=new String(buf);
int age=raf.readInt();
System.out.println("name="+name);
System.out.println("age="+age);
raf.close();
}
}