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 */ }