[Java]使用RandomAccessFile类遇到的一个小问题

程序清单如下:RandomFileTest.java
错误现象:通过raf写入的数据有问题,通过raf2读出的数据当然就不对了,错误原因正在寻找中!
import  java.io. * ;

public   class  RandomFileTest
{
     
public static void main(String[] args) throws Exception
    
{
        Employee ep1 
= new Employee("ZhangShan",18);
        Employee ep2 
= new Employee("LiSi",20);
        Employee ep3 
= new Employee("WangWu",39);
        RandomAccessFile raf 
= new RandomAccessFile("d:/java/RandomFile.txt","rw");
        raf.write(ep1.name.getBytes());
        raf.write(ep1.age);
        raf.write(ep2.name.getBytes());
        raf.write(ep2.age);
        raf.write(ep3.name.getBytes());
        raf.write(ep3.age);
        raf.close();
        
        RandomAccessFile raf2 
= new RandomAccessFile("d:/java/RandomFile.txt","r");
        
int len = 8;
        raf2.skipBytes(
12); //跳过第一个员工的信息,name 8个字节,age4个字节。
        System.out.println("输出第二个员工信息");
        String str 
= "";
        
for(int i=0;i<len;i++)
        
{
            str 
= str+(char)raf2.readByte(); //循环输出name的所有字节。
        }

        System.out.println(
"name : "+str);
        System.out.println(
"age : "+raf2.readInt());
        
        System.out.println(
"输出第一个员工信息:");
        raf2.seek(
0); //把指针移到开始位置
        str = "";
        
for(int i=0;i<len;i++)
        
{
            str 
= str+(char)raf2.readByte();
        }

        System.out.println(
"name : "+str);
        System.out.println(
"age : "+raf2.readInt());
        
        System.out.println(
"输出第三个员工信息");
        raf2.skipBytes(
12); //定位指针到第三个
        str = "";
        
for(int i=0;i<len;i++)
        
{
            str 
= str+(char)raf2.readByte();
        }

        System.out.println(
"name : "+str);
        System.out.println(
"age : "+raf2.readInt());
        
        raf2.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); //截取前8个字节
        }

        
else
        
{
            
while(name.length()<LEN)
            name 
= name + "";  //,代表一个什么东西?为什么不能用其它的
        }

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

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值