Tail -n 1000 in Java(Apache commons等)

我想知道是否已经存在util代码来实现* NIX尾部的一些/全部。 我想将一些文件/阅读器的最后n行复制到另一个文件/阅读器等。

这似乎是个不错的选择: Tailer Library 。 此实现基于它,但不一样。 虽然没有实现回顾以获得最后100行。 🙁

您可以在Heritrix的一个实用程序类中查看这个尾部实现 。 我没有写它,但我写了使用它的代码,据我所知正常工作。

这是一个UI应用程序 – 您可以查看源代码,看看它的作用(基本上是一些线程和IO)。 跟着 。

对于潜在的可变宽度编码等,“最后n行”非常棘手。

我在C#中写了一个反向行迭代器来回应另一个SO问题 。 代码就在那里,虽然它使用了C#中没有的迭代器块 – 你可能最好将所需的大小传递给方法并让它构建一个列表。 (然后,您可以将我的代码中的yield return语句转换为list.add()调用。)当然,您需要使用Java Charset而不是Encoding ,它们的API也略有不同。 最后,当你完成后,你需要反转列表。

这是假设您不想只读取整个文件。 如果您不介意这样做,您可以使用循环缓冲区来保持“此刻最后n行”,读取直到结束并随后返回缓冲区。 实现起来简单得多,但对于很长的文件效率要低得多。 尽管如此,很容易让这个应对任何读者,而不是只有几个选定的字符串流(我的反向迭代器所做的)。