我想读取一个非常大的文件的最后n行,而不使用Java将整个文件读入任何缓冲区/内存区域。

我环顾了JDK API和Apache Commons I/O,但无法找到适合此目的的一个。

我在想UNIX中tail或更少的方式。我认为他们不会加载整个文件,然后显示文件的最后几行。在Java中也应该有类似的方法来做同样的事情。

最佳答案

如果使用 RandomAccessFile ,则可以使用 length seek 到达文件末尾附近的特定点,然后从那里向前读取。

如果发现行数不足,请从该点备份,然后重试。一旦确定了最后一行N的开始位置,就可以找到该位置并进行读取和打印。

可以根据您的数据属性做出初步的最佳假设。例如,如果是文本文件,则行长平均可能不会超过132,因此,要获取最后五行,请在末尾开始660个字符。然后,如果输入错了,请在1320处再试一次(您甚至可以使用从最后660个字符中学到的知识来调整该值-例如:如果这660个字符只是三行,则下一次尝试可能是660/3 * 5加上一些额外的以防万一)。

10-06 09:57