java - 从文件末尾读取第 n 行

标签 java file

我想从文件末尾读取第 n 行。然而我的文件大小非常大,比如 15MB,所以我无法遍历每一行来找出最后一行。有没有一种有效的方法来获取第 n 行?

我使用了 RandomAccessFile API,但是我的行大小不是恒定的,因此我无法将文件指针移动到从末尾开始的第 n 行位置。有人能帮我吗。

最佳答案

您基本上必须向后读取文件。最简单的方法(不使用“ block ”读取)是获取文件的长度,然后使用 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());

单字节读取的效率并不高。如果性能成为问题,您可以采用相同的方法,但一次读取较大的文件 block (例如 8K),而不是一次读取 1 个字节。

关于java - 从文件末尾读取第 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518998/

相关文章:

java - 按手机上的后退按钮有不同的行为来返回 Intent

file - 读取 .pdb 文件

linux - Bash shell 复制隐藏目录中的文件

java 。将字符串附加到文件,以奇怪的输出结束

java - 可嵌入复合键的 BigInteger 哈希码

java - 使用 Spring Config 创建泛型类型

java - 方法局部变量存储在哪里?

java - 我可以获取从 Swing 到资源管理器的文件路径吗

java - 如何编写文本文件 Java

java -jar 类路径引用耳朵内的 jar