RandomAccessFile类
本章目标
掌握RandomAccessFile类的作用
可以使用RandomAccessFile读取指定位置的数据
RandomAccessFile
之前的File类只是针对文件本身进行操作的,而如果要想对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机的读取一个文件中指定位置的数据,例如,现在假设在文件中保存了以下的三个数据:
——zhangsan,30
——lisi,31
——wangwu,32
RandomAccessFile类的常用操作方法
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo01{
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ;// 指定要操作的文件
RandomAccessFile rdf = null ;// 声明RandomAccessFile类的对象
rdf = new RandomAccessFile(f,"rw") ;// 读写模式,如果文件不存在,会自动创建
String name = null ;
int age = 0 ;
name = "zhangsan" ;// 字符串长度为8
age = 30 ; // 数字的长度为4
rdf.writeBytes(name) ;// 将姓名写入文件之中
rdf.writeInt(age) ; // 将年龄写入文件之中
name = "lisi " ;// 字符串长度为8
age = 31 ; // 数字的长度为4
rdf.writeBytes(name) ;// 将姓名写入文件之中
rdf.writeInt(age) ; // 将年龄写入文件之中
name = "wangwu " ;// 字符串长度为8
age = 32 ; // 数字的长度为4
rdf.writeBytes(name) ;// 将姓名写入文件之中
rdf.writeInt(age) ;// 将年龄写入文件之中
rdf.close() ;// 关闭
}
/* 结果:仅有
* zhangsan
* */
};
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo02{
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ;// 指定要操作的文件
RandomAccessFile rdf = null ;// 声明RandomAccessFile类的对象
rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件
String name = null ;
int age = 0 ;
byte b[] = new byte[8] ;// 开辟byte数组
// 读取第二个人的信息,意味着要空出第一个人的信息
rdf.skipBytes(12) ;// 跳过第一个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ;// 读取数字
System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
// 读取第一个人的信息
rdf.seek(0) ;// 指针回到文件的开头
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ;// 读取数字
System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.skipBytes(12) ;// 空出第二个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 读取一个字节
}
name = new String(b) ; // 将读取出来的byte数组变为字符串
age = rdf.readInt() ;// 读取数字
System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.close() ;// 关闭
}
/* 结果:
* 第二个人的信息 --> 姓名:lisi ;年龄:31
* 第一个人的信息 --> 姓名:zhangsan;年龄:30
* 第三个人的信息 --> 姓名:wangwu ;年龄:32
* */
};