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