RandomAccessFile 是继承java.lang.Object 的一个支持文件随机存取的类;
(文档的解释)此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过getFilePointer
方法读取,并通过 seek
方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException
(是一种 IOException
)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出IOException
,而不是EOFException
。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
正如文档所说的,我们可以通过seek()方法来设置 要从文件哪个位置开始读取或者写入;通过getFilePointer方法来获取当前的“指针”位置。
创建RandomAccessFile对象:
<span style="white-space:pre"> </span>RandomAccessFile raf = new RandomAccessFile("info.txt", "rw");
参数:1、文件名,也可以是文件
2、文件的操作模式
mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
文件写入:
值
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
。"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
<span style="white-space:pre"> </span>RandomAccessFile raf = new RandomAccessFile("info.txt", "rw");
raf.seek(8);// 在指定位置开始写入数据
raf.write("content".getBytes());// 向文件写入数据
raf.writeInt(33);// 向文件写入int类型数据
raf.write(22);// 向文件写入int数型数据的低八位,也就是一个字节
raf.close();
文件读取:
<span style="white-space:pre"> </span>RandomAccessFile raf = new RandomAccessFile("info.txt", "r");
raf.seek(16);
System.out.println("从16个字节开始");
byte[] b = new byte[8];
int len = 0;
while ((len = raf.read(b)) != -1) {
System.out.println(new String(b, 0, len));
//long pointer = raf.getFilePointer();
//System.out.println("当前的file 指针:" + pointer);// 获取当前指针位置
}
raf.close();