我想从文件末尾读取第 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/