从Java中的随机访问文件中读取

时间:2014-10-26 21:25:43

标签: java randomaccessfile

我正在尝试设置一个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)

3 个答案:

答案 0 :(得分:3)

 final int EOF = -1;

你做到了。它不在Javadoc中。 readInt()方法在文件末尾不返回-1。它不可能。 -1是带内值。它抛出你正在获得的EOFException

您还要将您在EOF测试中阅读的int投放掉,这样您就可以比应该更快地到达文件末尾。

你应该循环while (true),抓住EOFException,然后在抓住它时休息。

答案 1 :(得分:0)

这是处理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();

答案 2 :(得分:-1)

您正在阅读的文件也需要创建为二进制文件。 如果您尝试从您创建的文件中读取文本,那么读者将读取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!