0

取得したファイルを印刷するときはいつでもreadInt()、を使用してバイトを読み取るときに問題が発生します。更新された一連の数値を表示したい場合、最後のcatchステートメントにも同じエラーが表示されます。これが私のコードです:RandomAccessFileEOFException

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

 }
}
4

1 に答える 1

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

将来の注意:このような問題に対処する場合、デバッガーでコードをステップ実行することは、ロジックの問題がどこにあるかを把握するための良い方法です。各ステップの後にRAFの位置と長さを見ることができ、何が間違っているのかを理解できるはずです。

于 2012-10-12T18:06:37.940 に答える