Java中的Tail-n1000(apachecommons等)
我想知道是否已经存在实现部分/全部*NIX tail的util代码。我想将某个文件/读取器的最后n行复制到另一个文件/读取器,等等。这似乎是一个不错的选择:。是基于它的,但不一样。但是,也不实施回溯以获取最后100行:(这是一个UI应用程序-您可以查看源代码,了解它的功能(基本上是一些线程和IO)对于可能的可变宽度编码等,“最后n行”非常棘手 我在C#中编写了一个反向行迭代器来响应。代码就在那里,尽管它使用的迭代器块在C#中不可用-您最好将所需的大小传递到方法中,并让它构建一个列表。(然后可以将代码中的Java中的Tail-n1000(apachecommons等),java,tail,Java,Tail,我想知道是否已经存在实现部分/全部*NIX tail的util代码。我想将某个文件/读取器的最后n行复制到另一个文件/读取器,等等。这似乎是一个不错的选择:。是基于它的,但不一样。但是,也不实施回溯以获取最后100行:(这是一个UI应用程序-您可以查看源代码,了解它的功能(基本上是一些线程和IO)对于可能的可变宽度编码等,“最后n行”非常棘手 我在C#中编写了一个反向行迭代器来响应。代码就在那里,尽管它使用的迭代器块在C#中不可用-您最好将所需的大小传递到方法中,并让它构建一个列表。(然后可以将
yield return
语句转换为list.add()
调用。)当然,您需要使用Java字符集而不是编码,它们的API也略有不同。最后,完成后您需要反转列表
这都是假设您不想只读取整个文件。如果您不介意这样做,您可以使用循环缓冲区来保留“当前的最后n行”,一直读到最后,然后返回缓冲区。这将更容易实现,但对于非常长的文件来说效率要低得多。不过,这很容易处理任何读取器,而不是流上的几个选定字符集(我的反向迭代器就是这样做的).您可以在的一个实用程序类中查看这一点。我没有编写它,但我编写了使用它的代码,据我所知,它工作正常