writeInt的问题

zgt20135 2009-08-02 01:59:28
代码如下:
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根本就没有起作用。请各位高手,帮忙解决!
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱伟 2009-08-02
  • 打赏
  • 举报
回复
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去。但是乱码不影响读取操作!
阿_布 2009-08-02
  • 打赏
  • 举报
回复
不好意思,看错了,我运行了一下你你的程序,没问题呀!

第二个员工信息:
name:lisi
age:24
第一个员工信息:
name:zhangsan
age:23
第三个员工信息:
name:wangwu
age:25

筱伟 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zgt20135 的回复:]
为什么在我电脑运行不出来,JDK是1.6的版本。
运行结果:
第二个员工信息:
name:lisi
就这样就没有了啊。
[/Quote]
我的也是jdk1.6啊,没有问题啊! 还是自己查吧,代码没有问题,应该是其他原因!
zgt20135 2009-08-02
  • 打赏
  • 举报
回复
找到问题。是我用的JCreator Pro 4.5 的问题,我在DOS下程序正常。谢谢各位了。
阿_布 2009-08-02
  • 打赏
  • 举报
回复
Employee类的构造方法name属性被覆盖掉了
去掉这行试试 this.name=name;
zgt20135 2009-08-02
  • 打赏
  • 举报
回复
为什么在我电脑运行不出来,JDK是1.6的版本。
运行结果:
第二个员工信息:
name:lisi
就这样就没有了啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧