(1)作用
用于根据字节偏移量来操作文件中的数据。
注意:只能实现文件中数据的读取和修改,根本无法做到插入!(当然,将文件大小扩容,并且插入位置后的数据全部后移也是一种方法)
(2)常用方法
1)构造方法
public RandomAccessFile(String name, String mode)
name:文件的路径
mode:r——只读 rw——读写
2)绝对跳跃
public native void seek(long pos)
也就是相对于文件开头跳过多少字节3)相对跳跃
public int skipBytes(int n)
相对当前位置跳跃多少个字节
(3)实例
@Test
public void testRaf()
{
RandomAccessFile file = null;
try {
file = new RandomAccessFile("d:\\BugReport.txt", "rwd");
for (int i = 0; i < 5; i++) {
file.writeInt(i);
}
//修改第二个数据(因为int类型为4byte,所以*4),绝对定位
file.seek(2*4);
file.writeInt(6);
System.out.println("打印所有数据:修改后");
file.seek(0);
for (int i = 0; i < file.length()/4-1; i++) {
System.out.println(file.readInt());
}
System.out.println("打印位置跳跃后数据");
file.seek(0);
//相对当前位置跳过4个字节
file.skipBytes(1*4);//相对定位
System.out.println(file.readInt());
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (file!=null) {
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果为:
打印所有数据:修改后
0
1
6
3
4
打印位置跳跃后数据
1
(4)总结
只适合于其中记录大小完全相同的文件,其他情况下使用起来相当麻烦
另外,也不要用这个了,使用nio的内存映射来做