RandomAccessFile
1.随机访问文件,自身具备读写方法
2.通过skipBytes(int x),seek(int x)来达到随机访问
clipboard.png
RandomAccessFile:该类不是IO体系中子类,而是直接继承自Object;但它是IO包中成员,因为它具备读写功能,其内部封装了一个数组,通过指针对数组的元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。
seek()
其实完成读写的原理就是内部封装了字节输入流和输出流,通过构造函数可以看出,该类只能操作文件,而且操作文件还有模式:只读r,读写rw等。
如果模式为只读r,不会创建文件,会去读取一个已存在文件,如果该文件不存在,则会出现异常;如果模式为读写rw,操作的文件不存在,会自动创建,如果存在则不会覆盖。
write()方法只写出int类型的最低八位
writeInt()方法写出int的所有位
一个中文两个字节
RandomAccessFile可以实现数据的分段写入
多线程下载
import java.io.RandomAccessFile;
public class RandomAccessFileDemo {
public static void main(String[] args) throws Exception {
writeFile();
readFile();
}
public static void readFile() throws Exception {
RandomAccessFile r = new RandomAccessFile("E:\\ran.txt", "r");
// 调整对象指针
// r.seek(8);
// 跳过指定的字节数
r.skipBytes(8);
byte[] buf = new byte[4];
r.read(buf);
String name = new String(buf);
int age = r.readInt();
System.out.println("name:" + name);
System.out.println("age:" + age);
r.close();
}
public static void writeFile() throws Exception {
RandomAccessFile r = new RandomAccessFile("E:\\ran.txt", "rw");
// r.seek(0);
r.write("李四".getBytes());
r.writeInt(97);
r.write("王五".getBytes());
r.writeInt(99);
r.close();
}
}
网友评论