读取RandomAccessFile时出现EOFException错误

时间:2012-10-12 18:00:40

标签: java random-access eofexception

使用readInt()时,我在使用RandomAccessFile读取字节时遇到一些问题 无论什么时候我想打印文件,我都会EOFException。当我想显示更新的一系列数字时,最后一个catch语句中会出现相同的错误。 这是我的代码:

import java.io.*;
import java.util.Scanner;
public class CentNumbers {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
int num;
RandomAccessFile numbers = new RandomAccessFile("Numbers.dat", "rw");

System.out.println("Saved numbers are:");
numbers.setLength(0);

for (int i = 0; i < 100; i++){
  num=(int)(Math.random()*100);
  numbers.writeInt(num);
  System.out.print(numbers.readInt()+" ");
  }
try{
do{
System.out.print("\nadd another number? (y/n):");

String x= input.next();

if (!x.equals("y")) throw new Exception("Comeback Soon");


    System.out.print("Write number :");
    int b=input.nextInt();
    numbers.seek(numbers.length());
    numbers.writeInt(b);

 } while(true);

}//end try


catch ( Exception e){

    System.out.println("Saved numbers are:");

    for (int i=0; i<numbers.length();i++){
        numbers.seek(i*4);
        System.out.print(numbers.readInt()+" ");

    }//end for
    System.out.println();
    System.out.println(e.getMessage() );
    numbers.close();

    }//end catch

 }
}

1 个答案:

答案 0 :(得分:1)

在此循环中,您尝试从文件末尾读取(readInt()位于writeInt()之后,而不重置位置。)

for (int i = 0; i < 100; i++){
  num=(int)(Math.random()*100);
  numbers.writeInt(num);
  System.out.print(numbers.readInt()+" ");
}

在此循环中,文件中的数字等于文件的长度(以字节为单位),因为每个int有4个字节,因此您正在读取超过文件。

for (int i=0; i<numbers.length();i++){
    numbers.seek(i*4);
    System.out.print(numbers.readInt()+" ");

}//end for

未来的注意事项:在处理这样的问题时,在调试器中单步执行代码是了解逻辑问题的好方法。你可以在每一步之后看看英国皇家空军的位置和长度,你应该能够弄清楚你做错了什么。