【问题标题】:Tail -n 1000 in Java (Apache commons, etc)Java 中的 Tail -n 1000(Apache 公共资源等)
【发布时间】:2009-06-02 03:00:00
【问题描述】:

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

【问题讨论】:

    标签: java tail


    【解决方案1】:

    这似乎是一个不错的选择:Tailer LibraryThis implementation 基于它,但不一样。不过,两者都没有实现回溯以获取最后 100 行。 :(

    【讨论】:

      【解决方案2】:

      您可以在Heritrix 的实用程序类之一中查看此tail implementation。我没有写它,但我写了使用它的代码,据我所知,它可以正常工作。

      【讨论】:

        【解决方案3】:

        这是一个 UI 应用程序 - 您可以查看源代码以了解它的作用(基本上是一些线程和 IO)。 Follow.

        【讨论】:

          【解决方案4】:

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

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

          这一切都假设您不想只想阅读整个文件。如果您不介意这样做,您可以使用循环缓冲区来保留“此刻的最后 n 行”,通读到最后,然后返回缓冲区。这样实现起来会很多简单,但对于非常长的文件来说效率会低得多。不过,它很容易处理 任何 阅读器,而不是只在流上选择几个选定的字符集(我的反向迭代器就是这样做的)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-11
            • 1970-01-01
            • 1970-01-01
            • 2021-11-12
            • 1970-01-01
            • 2012-10-23
            • 2015-11-24
            • 2014-06-07
            相关资源
            最近更新 更多