从Java中的随机访问文件中读取
我正在尝试设置一个while循环,它将从RandomAccessFile读取并在到达文件末尾时停止。 但每次我尝试运行程序时都会出错。
RandomAccessFile raf = new RandomAccessFile(filename, "rw"); final int EOF = -1; while(raf.readInt() != EOF){ id = raf.readInt(); existingMileage = raf.readInt(); gasCost = raf.readInt(); ndays = raf.readInt(); rate = raf.readInt(); totalCharge = raf.readInt(); discount = raf.readInt(); tax = raf.readInt(); netCharge = raf.readInt(); returnMileage = raf.readInt(); }
这是我得到的错误:
Exception in thread "main" java.io.EOFException at java.io.RandomAccessFile.readInt(Unknown Source) at TakeHome.TakeHome.fileReaderMethod(TakeHome.java:127) at TakeHome.TakeHome.main(TakeHome.java:20)
final int EOF = -1;
你做到了。 它不在Javadoc中。 readInt()
方法在文件末尾不返回-1。 它不能。 -1是带内值。 它抛出了你得到的非常EOFException
。
你也把你在EOF测试中读到的int
扔掉了,所以你比你应该更快到达文件的末尾。
你应该循环while (true)
,捕获EOFException
,并在捕获它时断开。
这是处理RandomAccessFile的一种方法:
RandomAccessFile file = new RandomAccessFile("testFile", "r"); //random code in between while(true){ try{ //do stuff with code, like reading from file } catch(EOFException e){ break; } } //do some more stuff if you like file.close();
您正在阅读的文件也需要创建为二进制文件。 如果你试图从你创建的文件中读取文本,那么读者将读取int的4个字节,例如,如果你有一个数字序列12345678,读者不知道这些是单独的数字并将对待它作为一个整数然后转到文件的末尾。 另外要提到的是,您需要捕获EOFException
以结束循环原因-1也可以是整数。
希望有所帮助。
编辑:试试这个
RandomAccessFile raf = new RandomAccessFile(new File("/path/to/file"), "rw"); int numberCounter = 0; int totalNumbers = 10; for (int i = 0; i < totalNumbers; i++) { raf.writeInt(i * 2); } raf.seek(0); try { while (true) { int id = raf.readInt(); System.out.println(id); numberCounter++; } } catch (EOFException ex) { System.out.println("Total number " + numberCounter); System.out.println("End of file reached!"); } finally { raf.close(); }
输出:
0 2 4 6 8 10 12 14 16 18 Total number 10 End of file reached!