簡體   English   中英

從Java中的隨機訪問文件讀取

[英]Reading from random access file in 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!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM