簡體   English   中英

從文件末尾讀取第n行

[英]Read nth line from the end of the file

我想從文件末尾讀取第n行。 但是我的文件大小非常大,如15MB,所以我不能通過每一行來查找最后一行。 有沒有一種有效的方法來獲得第n行?

我經歷了RandomAccessFile API但是我的行大小不是常數,所以我無法將文件指針從末尾移動到第n行位置。 有人能幫我嗎。

你基本上必須向后閱讀文件。 不使用“塊”讀取的最簡單方法是獲取文件的長度,然后使用RandomAccessFile讀取(length--)的字節,直到您計算了所需的換行/回車數。 然后,您可以向前讀取一行的字節數。

像這樣......

    RandomAccessFile randomAccessFile = new RandomAccessFile("the.log", "r");
    long offset = randomAccessFile.length() - 1;

    int found = 0;
    while (offset > 0 && found < 10) {
        randomAccessFile.seek(offset--);
        if (randomAccessFile.read() == 10) {
            found++;
        }
    }
    System.out.println(randomAccessFile.readLine());

單字節讀取許多不是超高效的。 如果性能成為問題,則采用相同的方法,但一次讀取較大的文件塊(例如8K),而不是一次讀取1個字節。

看看這個答案 ,這表明你確實需要通讀文件(15MB 並不大)。 只要您only storing the latest 9 rows ,您就可以飛過該文件。

暫無
暫無

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

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