RandomAccessFile类的使用,随机读写文件。
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer
方法读取,并通过 seek
方法设置。
import java.io.*;
public class RandomAccessFileDemo01{
public static void main(String[] args)throws Exception{ //判断是否是目录
File f = new File("d:"+File.separator+"test.txt"); //在创建文件是,使用File.separator读取系统默认的目录格式,有很好的移植性。
RandomAccessFile raf = null;
raf = new RandomAccessFile(f,"rw"); //读写模式,如果文件不存在,则创建
String name=null;
int age = 0;
name = "zhangsan";
age=30;
raf.writeBytes(name); //写入文件中
raf.writeInt(age);
name = "lisi ";
age=30;
raf.writeBytes(name); //写入文件中
raf.writeInt(age);
name = "wangwu ";
age=30;
raf.writeBytes(name); //写入文件中
raf.writeInt(age);
raf.close(); //关闭
System.out.println("写入成功!");
}
}
/*
writeByte一次写8个字节,writeInt一次写4个字节,所以读也是。
String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
学习了File后进一步学习RandomAccessFile来向文件中写入读出。
*/
import java.io.*;
public class RandomAccessFileDemo02{
public static void main(String[] args)throws Exception{ //判断是否是目录
File f = new File("d:"+File.separator+"test.txt"); //在创建文件是,使用File.separator读取系统默认的目录格式,有很好的移植性。
RandomAccessFile raf = null;
raf = new RandomAccessFile(f,"r"); //读模式
String name=null;
int age = 0;
byte[] b = new byte[8];
raf.skipBytes(12); //跳过12个字节,也就是第一个人的信息
for(int i=0;i<b.length;i++){
b[i]=raf.readByte();
}
name = new String(b); //将读出的字节转化成字符串String中的方法
age = raf.readInt();
System.out.println("第二个人的信息--->姓名:"+name+"年龄:"+age);
//读取第一个人的信息
raf.seek(0); //指针回到文件的开头
for(int i=0;i<b.length;i++){
b[i]=raf.readByte();
}
name = new String(b); //将读出的字节转化成字符串String中的方法
age = raf.readInt();
System.out.println("第一个人的信息--->姓名:"+name+"年龄:"+age);
//读取第三个人的信息
raf.skipBytes(12); //跳过12个字节,跳过第二个人的信息,因为读完了第一个人raf指向在了第二个人的头
for(int i=0;i<b.length;i++){
b[i]=raf.readByte();
}
name = new String(b); //将读出的字节转化成字符串String中的方法
age = raf.readInt();
System.out.println("第三个人的信息--->姓名:"+name+"年龄:"+age);
}
}
主要注意头注释里面的内容。