javase初学者,正在学习RandomAccessFile类,运行书上的程序时出现了问题,求 大神赐教
程序具体如下,一个是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)