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可以对文件的任意位置进行操作,这就意味着我们可以使用多线程同时操作一个文件,像可以多线程下载等 |
|