[英]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.