package edu.fjut.file;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
//RandomAccessFile类的主要功能是完成随机读取功能
//可以读取指定位置的内容
public class RandomAccessFileDemo {
public static void main(String[] args) throws IOException {
//指定要操作的文件
File file=new File("d:"+File.separator+"javase"+File.separator+"stu.txt");
//rw为文件的打开方式(r,w,rw),如果文件不存在,会自动创建
RandomAccessFile rdf=new RandomAccessFile(file,"rw");
String name=null;
int age=0;
//在文件中,所有的内容都是按照字节存放的,都有固定的保存位置.
name="zhangsan"; //字符串的长度为8
age=30; //数字的长度为4
rdf.writeBytes(name); //将姓名写入文件中
rdf.writeInt(age); //将年龄写入文件中
name="lisi "; //不够8个字符,用空格补全
age=32;
rdf.writeBytes(name);
rdf.writeInt(age);
name="wangwu ";
age=36;
rdf.writeBytes(name);
rdf.writeInt(age);
rdf.close();//注意要关闭通道
}
}
package edu.fjut.file;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
//读取文件中的内容
public class RandomAccessFileDemo2 {
public static void main(String[] args)throws IOException {
File file=new File("d:"+File.separator+"javase"+File.separator+"stu.txt");
//以只读的方式打开文件
RandomAccessFile rdf=new RandomAccessFile(file,"r");
String name=null;
int age;
byte []bytes=new byte[8];
//跳过一个人的信息
rdf.skipBytes(12);
//读取字符串需要一个一个字节的读取
for(int i=0;i<bytes.length;i++){
bytes[i]=rdf.readByte();
}
name=new String(bytes); //把byte数组转换成字符串对象
age=rdf.readInt();
System.out.println("第二个人的信息是: 姓名-->"+name.trim()+",年龄-->"+age);
rdf.seek(0);//指针回到文件的开头
for(int i=0;i<bytes.length;i++){
bytes[i]=rdf.readByte();
}
name=new String(bytes);
age=rdf.readInt();
System.out.println("第一个人的信息是: 姓名-->"+name.trim()+",年龄-->"+age);
rdf.skipBytes(12);//空出第二个人的信息
for(int i=0;i<bytes.length;i++){
bytes[i]=rdf.readByte();
}
name=new String(bytes);
age=rdf.readInt();
System.out.println("第三个人的信息是: 姓名-->"+name.trim()+",年龄-->"+age);
rdf.close();//注意关闭通道
}
/*
第二个人的信息是: 姓名-->lisi,年龄-->32
第一个人的信息是: 姓名-->zhangsan,年龄-->30
第三个人的信息是: 姓名-->wangwu,年龄-->36
*/
}