javase初学者,正在学习RandomAccessFile类,运行书上的程序时出现了问题,求 大神赐教

kalelu 2018-09-04 04:20:36
程序具体如下,一个是RandomAccessFileDemo类,实现随机读写文件方法,代码如下

package example.fileDemo;

import java.io.*;

public class RandomAccessFileDemo {

public static void randomWriteFile(File file)
{
Employee[] employee = new Employee[4];
employee[0] = new Employee("张三",23);
employee[1] = new Employee("李四",24);
employee[2] = new Employee("王五",25);
employee[3] = new Employee("钱六",22);
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file, "rw");
}
catch(FileNotFoundException e1)
{
e1.printStackTrace();
}
try {
for(Employee e:employee)
{
randomAccessFile.writeChars(e.getName());
randomAccessFile.writeInt(e.getAge());
}
randomAccessFile.close();
}

catch(IOException e1)
{
e1.printStackTrace();
}
}


private static String readName(RandomAccessFile randomAccessFile) throws IOException
{
char name[] = new char[8];
for(int i = 0;i<name.length;i++)
{
name[i] = randomAccessFile.readChar();
}
return new String(name).replace('\0',' ');
}

public static Employee[] randomreadFile(File file) throws Exception
{
RandomAccessFile randomAccessFile;
randomAccessFile = new RandomAccessFile(file,"r");
Employee[] employee = new Employee[4];
int num = (int)randomAccessFile.length()/Employee.size();
for(int i=0;i<num;i++)
{
randomAccessFile.seek((i)*Employee.size());
employee[i] = new Employee(readName(randomAccessFile),randomAccessFile.readInt() );
}
randomAccessFile.close();
return employee;
}

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String filename ="employeeExample";
File file = new File(filename);
randomWriteFile(file);
Employee[] employee = randomreadFile(file);
for(Employee e:employee)
{
System.out.println("name = "+e.getName()+"\t|\tage = "+e.getAge());
}
}

}


还有一个是Employee类,用于创建员工对象,代码如下:

package example.fileDemo;

public 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;
}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}

public void setName(String name)
{
this.name = name;
}

public void setAge(int age)
{
this.age = age;
}

public static int size()
{
return 2*4+8;
}
}

程序运行出现错误如下:

Exception in thread "main" java.io.EOFException
at java.base/java.io.RandomAccessFile.readInt(RandomAccessFile.java:837)
at example.fileDemo.RandomAccessFileDemo.randomreadFile(RandomAccessFileDemo.java:57)
at example.fileDemo.RandomAccessFileDemo.main(RandomAccessFileDemo.java:68)
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_mail 2018-09-05
  • 打赏
  • 举报
回复
你写文件时,每个Employee的长度是20字节(16字节名字,4字节年龄),所以Employee.size()应返回20
kalelu 2018-09-05
  • 打赏
  • 举报
回复
引用 2 楼 blue_mail 的回复:
你写文件时,每个Employee的长度是20字节(16字节名字,4字节年龄),所以Employee.size()应返回20

666,这个分数怎么给你啊

62,615

社区成员

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

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