从文件末尾读取第n行

时间:2014-02-03 02:53:30

标签: java file

我想从文件末尾读取第n行。但是我的文件大小非常大,如15MB,所以我不能通过每一行来查找最后一行。有没有一种有效的方法来获得第n行?

我经历了RandomAccessFile API但是我的行大小不是常数,所以我无法将文件指针从末尾移动到第n行位置。有人能帮我吗。

2 个答案:

答案 0 :(得分:2)

你基本上必须向后阅读文件。不使用“块”读取的最简单方法是获取文件的长度,然后使用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个字节。

答案 1 :(得分:0)

看一下这个answer,这表明你确实需要通读文件(15MB 大)。只要你是only storing the latest 9 rows,那么你就可以飞过这个文件。