File 类只是针对文件本身进行操作,而如果要对文件内容进行操作,则可以使用 RandomAccessFile 类,此类属于随机读取类,可以随机读取一个文件中指定位置的数据
一、RandomAccessFile 类的常用操作方法
如果使用 rw 方式声明 RandomAccessFile 对象时,要写入的文件不存在,系统将自动进行创建
import java.io.File;
import java.io.RandomAccessFile;
public class Root{
//直接抛出异常,程序中不再处理
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 = "str1";
age = 30;
rdf.writeBytes(name);//将姓名写入文件之中
rdf.writeInt(age);//将年龄写入文件之中
name = "str2";
age = 31;
rdf.writeBytes(name);//将姓名写入文件之中
rdf.writeInt(age);//将年龄写入文件之中
rdf.close();//关闭文件
}
}
这里的年龄是按照整型格式写入的, 所以直接打开文件时不可见的
二、使用RandomAccessFile类写入数据
读取时直接使用 r 的模式即可,以只读的方式打开文件
读取时所有的字符串只能按照 byte 数组的方式读取出来,而且所有的长度是 8 位。
import java.io.File;
import java.io.RandomAccessFile;
public class Test{
public static void main(String[] args) throws Exception{
File f = new File("D:" + File.separator + "test.txt");
RandomAccessFile rdf = null;
rdf = new RandomAccessFile(f,"r");//以度方式打开文件,会自动创建新文件
String name = null;
int age = 0;
byte b[] = new byte[8];//准备空间读取姓名
rdf.skipBytes(12);
for (int i=0;i<b.length;i++){
b[i] = rdf.readByte();//循环读取出前8个内容
}
name = new String(b);//将读取出来的byte数组变为 String
age = rdf.readInt();//读取数字
System.out.println("第二个人信息 --> 姓名:" + name + ";年龄:" + age);
rdf.seek(0);//指针回到文件的开头
b = new byte[8];//准备空间读取姓名
for (int i=0;i<b.length;i++){
b[i] = rdf.readByte();//循环读取出前8个内容
}
name = new String(b);//将读取出来的 byte 数组变为 String
age = rdf.readInt();//读取数字
System.out.println("第一个人信息 --> 姓名:" + name + ";年龄:" + age);
}
}
- 23
- 24
- 25
- 26
- 27
- 28