簡體   English   中英

讀取RandomAccessFile時出現EOFException錯誤

[英]EOFException error at reading a RandomAccessFile

每當我想打印EOFException的文件時,在使用RandomAccessFile時從readInt()讀取字節時遇到一些問題。 當我要顯示更新的數字序列時,最后一個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

 }
}

在此循環中,您嘗試從文件末尾讀取(您的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

面向未來的注意事項:處理此類問題時,在調試器中單步執行代碼是找出邏輯問題出在哪里的好方法。 您可以在每個步驟之后查看RAF的位置和長度,並且應該能夠弄清楚自己在做什么錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM