【发布时间】:2009-06-02 03:00:00
【问题描述】:
我想知道是否已经存在用于实现部分/全部 *NIX 尾部的 util 代码。我想将某个文件/阅读器的最后 n 行复制到另一个文件/阅读器等。
【问题讨论】:
我想知道是否已经存在用于实现部分/全部 *NIX 尾部的 util 代码。我想将某个文件/阅读器的最后 n 行复制到另一个文件/阅读器等。
【问题讨论】:
这似乎是一个不错的选择:Tailer Library。 This implementation 基于它,但不一样。不过,两者都没有实现回溯以获取最后 100 行。 :(
【讨论】:
您可以在Heritrix 的实用程序类之一中查看此tail implementation。我没有写它,但我写了使用它的代码,据我所知,它可以正常工作。
【讨论】:
这是一个 UI 应用程序 - 您可以查看源代码以了解它的作用(基本上是一些线程和 IO)。 Follow.
【讨论】:
“最后 n 行”对于潜在的可变宽度编码等非常棘手。
我在 C# 中编写了一个反向行迭代器来响应another SO question。代码就在那里,尽管它使用了 C# 中不可用的迭代器块 - 你最好将所需的大小传递给方法并让它构建一个列表。 (然后您可以将我代码中的yield return 语句转换为list.add() 调用。)当然,您需要使用Java Charset 而不是Encoding,它们的API 也略有不同。最后,您需要在完成后反转列表。
这一切都假设您不想只想阅读整个文件。如果您不介意这样做,您可以使用循环缓冲区来保留“此刻的最后 n 行”,通读到最后,然后返回缓冲区。这样实现起来会很多简单,但对于非常长的文件来说效率会低得多。不过,它很容易处理 任何 阅读器,而不是只在流上选择几个选定的字符集(我的反向迭代器就是这样做的)。
【讨论】: