file类只是针对文件本身操作,而不能对文件内容进行操作,面对这种情况我们可以使用RandomAccessFile类进行操作。这个类可以随机的读取文件中的指定位置的数据。
代码1:写文件
package org.wkj.deno.randomaccessdemo;
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;
rdf = new RandomAccessFile(f, "rw");
String name=null;
int age=0;
name="zhangshan";
age = 30;
rdf.writeBytes(name);
rdf.writeInt(age);
name="lisi";
age = 31;
rdf.writeBytes(name);
rdf.writeInt(age);
name="wangwu";
age = 32;
rdf.writeBytes(name);
rdf.writeInt(age);
rdf.close();
}
}
使用RandomAccessFile读取数据
package org.wkj.deno.randomaccessdemo;
import java.io.File;
//import java.io.FileNotFoundException;
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;
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();
}
name = new String(b);
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();
}
name = new String(b);
age= rdf.readInt();
System.out.println("第一个人的信息------>姓名:"+name+":年龄:"+age);
rdf.skipBytes(12);
b = new byte[8];
for (int i = 0; i < b.length; i++) {
b[i]=rdf.readByte();
}
name = new String(b);
age= rdf.readInt();
System.out.println("第三个人的信息------>姓名:"+name+":年龄:"+age);
rdf.close();
}
}
总结
知道RandomAccessFile的作用就可以了,一般使用起来比较麻烦的