日期:2014-05-20  浏览次数:20940 次

还是打印不出来啊
我想打印出这样的结果:
lisi:258
张三:23
wangwu:25
编写了两个类Emplyee.java和RandomFileTest.java,程序编译也通过了,但是打印结果不对啊!还有在Emplyee.java类中,\0000,占用几个字节啊!
代码如下:Emplyee.java类

public class Emplyee {
public String name = null;
public int age = 0;
public static final int LEN = 8;

/**
* Method Emplyee
*
*
*/
public Emplyee(String name,int age) {
// TODO: Add your code here
if(name.length()>LEN)
{
name = name.substring(0,LEN);
}
else
{
name += "\0000";
}
this.name = name;
this.age = age;
}
}


RandomFileTest.java类
import java.io.*;
public class RandomFileTest {

/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) throws Exception
{
// TODO: Add your code here
Emplyee a = new Emplyee("张三",23);
Emplyee b = new Emplyee("lisi",258);
Emplyee c = new Emplyee("wangwu",25);
RandomAccessFile ra = new RandomAccessFile("tt.text","rw");
ra.writeChars(a.name);
ra.writeInt(a.age);
ra.writeChars(b.name);
ra.writeInt(b.age);
ra.writeChars(c.name);
ra.writeInt(c.age);
ra.close();

String strName = "";
//int len = 0;
//byte[] buf = new byte[8];
RandomAccessFile raf = new RandomAccessFile("tt.text","r");
raf.skipBytes(20);
//len = raf.read(buf);
//strName= new String(buf,0,len);
for(int i=0;i<16;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());

strName = "";
raf.seek(0);
//len = raf.read(buf);
//strName = new String(buf,0,len);
for(int i=0;i<16;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());

raf.skipBytes(20);
//len = raf.read(buf);
//strName = new String(buf,0,len);
strName = "";
for(int i=0;i<16;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());
raf.close();

}
}




------解决方案--------------------
我有点想不通楼主为什么不用序列化来解决这个问题呢?

还有....
ra.writeChars(a.name); 
ra.writeInt(a.age); 
ra.writeChars(b.name); 
ra.writeInt(b.age); 
ra.writeChars(c.name); 
ra.writeInt(c.age); 

这些代码太笨啦....你在Emplyee 类中重写toString()方法,然后直接
rs.write((a.toString()+"\r\n").getBytes())这样不是更爽?