代码如下:
import java.io.*;
public class RandomFileTest
{
public static void main(String []args) throws Exception
{
Employee e1=new Employee("zhangsan",23);
Employee e2=new Employee("lisi",24);
Employee e3=new Employee("wangwu",25);
RandomAccessFile ra=new RandomAccessFile("c:\\1.txt","rw");
ra.write(e1.name.getBytes());
ra.writeInt(e1.age);
ra.write(e2.name.getBytes());
ra.writeInt(e2.age);
ra.write(e3.name.getBytes());
ra.writeInt(e3.age);
ra.close();
RandomAccessFile raf=new RandomAccessFile("c:\\1.txt","r");
int len=8;
raf.skipBytes(12);
System.out.println("第二个员工信息:");
String str="";
for(int i=0;i<len;i++)
str=str+(char)raf.readByte();
System.out.println("name:"+str);
System.out.println("age:"+raf.readInt());
System.out.println("第一个员工信息:");
raf.seek(0);
str="";
for(int i=0;i<len;i++)
str=str+(char)raf.readByte();
System.out.println("name:"+str);
System.out.println("age:"+raf.readInt());
System.out.println("第三个员工信息:");
raf.skipBytes(12);
str="";
for(int i=0;i<len;i++)
str=str+(char)raf.readByte();
System.out.println("name:"+str);
System.out.println("age:"+raf.readInt());
raf.close();
}
}
class Employee
{
String name;
int age;
final static int LEN=8;
public Employee(String name,int age)
{
if(name.length()>LEN)
{
name=name.substring(0,8);
}
else
{
while(name.length()<LEN)
name=name+"\u0000";
}
this.name=name;
this.age=age;
}
}编译通过没有任何问题。但运行的结果却只有第二个员工信息:name: lisi 其它的都没有了。本来是要输出三个员工信息的。
查看了一下C盘下的1.txt文件,里面只有zhangshan,lisi,wangwu,而没有23,24,25这些字符。writeInt根本就没有起作用。请各位高手,帮忙解决!

解决方案 »

  1.   

    Employee类的构造方法name属性被覆盖掉了
    去掉这行试试   this.name=name;
      

  2.   

    不好意思,看错了,我运行了一下你你的程序,没问题呀!第二个员工信息:
    name:lisi
    age:24
    第一个员工信息:
    name:zhangsan
    age:23
    第三个员工信息:
    name:wangwu
    age:25
      

  3.   

    import java.io.*; 
    import java.lang.Exception;
    public class RandomFileTest 

    public static void main(String []args) throws Exception 

    Employee e1=new Employee("zhangsan",23); 
    Employee e2=new Employee("lisi",24); 
    Employee e3=new Employee("wangwu",25); 
    RandomAccessFile ra=new RandomAccessFile("e:\\1.txt","rw"); 
    ra.write(e1.name.getBytes()); 
    ra.writeInt(e1.age); 
    ra.write(e2.name.getBytes()); 
    ra.writeInt(e2.age); 
    ra.write(e3.name.getBytes()); 
    ra.writeInt(e3.age); 
    ra.close(); 
    RandomAccessFile raf=new RandomAccessFile("e:\\1.txt","r"); 
    int len=8; 
    raf.skipBytes(12); 
    System.out.println("第二个员工信息:"); 
    String str=""; 
    for(int i=0;i <len;i++) 
    str=str+(char)raf.readByte(); 
    System.out.println("name:"+str); 
    System.out.println("age:"+raf.readInt()); 
    System.out.println("第一个员工信息:"); 
    raf.seek(0); 
    str=""; 
    for(int i=0;i <len;i++) 
    str=str+(char)raf.readByte(); 
    System.out.println("name:"+str); 
    System.out.println("age:"+raf.readInt()); 
    System.out.println("第三个员工信息:"); 
    raf.skipBytes(12); 
    str=""; 
    for(int i=0;i <len;i++) 
    str=str+(char)raf.readByte(); 
    System.out.println("name:"+str); 
    System.out.println("age:"+raf.readInt()); 
    raf.close(); 


    class Employee 

    String name; 
    int age; 
    final static int LEN=8; 
    public Employee(String name,int age) 

    if(name.length()>LEN) 

    name=name.substring(0,8); 

    else 

    while(name.length() <LEN) 
    name=name+"\u0000"; 

    this.name=name; 
    this.age=age; 

    }
    运行结果:
    第二个员工信息:
    name:lisi
    age:24
    第一个员工信息:
    name:zhangsan
    age:23
    第三个员工信息:
    name:wangwu
    age:25
    写入文件的值:
    zhangsan   lisi       wangwu     
    3个乱码的位置就是age的位置,为什么乱码,自己baigoole去。但是乱码不影响读取操作!
      

  4.   

    为什么在我电脑运行不出来,JDK是1.6的版本。
    运行结果: 
    第二个员工信息: 
    name:lisi 
    就这样就没有了啊。
      

  5.   

    找到问题。是我用的JCreator Pro 4.5 的问题,我在DOS下程序正常。谢谢各位了。
      

  6.   

    我的也是jdk1.6啊,没有问题啊! 还是自己查吧,代码没有问题,应该是其他原因!