//RandomFileTest.java import java.io.*; public class RandomFileTest { public static void main(String[] args) throws Exception { Employee e1=new Employee("张三",23);//在Java中不管是中文字符还是英文字符,它都是一个字符,都是占用两个字节。但是在本地的计算机编码(ASC)中英文字符占用一个字节,而中文字符占用两个字节 Employee e2=new Employee("lisi",257); Employee e3=new Employee("wangwu",25); RandomAccessFile ra=new RandomAccessFile("employee.txt","rw"); /* ra.write(e1.name.getBytes()); ra.write(e1.age); ra.writeInt(e1.age); ra.write(e2.name.getBytes()); ra.writeInt(e2.age); ra.write(e3.name.getBytes()); ra.writeInt(e3.age); ra.close(); */ ra.writeChars(e1.name); ra.writeInt(e1.age); ra.writeChars(e2.name); ra.writeInt(e2.age); ra.writeChars(e3.name); ra.writeInt(e3.age); ra.close(); //int len=0; //byte[] buf=new byte[Employee.LEN]; String strName=""; RandomAccessFile raf=new RandomAccessFile("employee.txt","r"); raf.skipBytes(Employee.LEN*2+4); //len=raf.read(buf); //strName=new String(buf,0,len); //System.out.println(strName.trim()+":"+raf.read()); for(int i=0;i<Employee.LEN;i++) { strName+=raf.readChar(); } System.out.println(strName.trim()+":"+raf.readInt()); raf.seek(0); strName=""; for(int i=0;i<Employee.LEN;i++) { strName+=raf.readChar(); } System.out.println(strName.trim()+":"+raf.readInt()); raf.skipBytes(Employee.LEN*2+4); strName=""; for(int i=0;i<Employee.LEN;i++) { strName+=raf.readChar(); } System.out.println(strName.trim()+":"+raf.readInt()); raf.close(); } } //Employee.java public class Employee { public String name = null; public int age = 0; public static final int LEN = 8; public Employee(String name, int age) { if(name.length() > LEN){ name = name.substring(0,8); } else{ //while(name.getBytes().length < LEN){ //name.length统计姓名中的字符数。英文字符在java中的编码(Unicode)与在机器中的编码(ASC)方式是不同的 while(name.length() < LEN){ name+="/u0000"; } } this.name=name; this.age = age; } }