是否可以将“tail -f”命令输出到java程序?

根据:

unix / linux的Java IO实现“tail -f”

Java“tail -f”包装器

我认为它可能但我有以下问题。

String TailCommand = "tail -f /path/PATH.txt| grep (...)"; Runtime r = Runtime.getRuntime(); Process p = r.exec(TailCommand); //handle buffer while (running) { // handle output } 

进程p终止。 它与没有“top”或“tail -f”的常量更新的命令一起工作正常。

我想知道我是否错过了什么,有一些缓冲限制或其他什么? 我正在使用eclipse,但我想这应该不会对流程行为产生任何影响。

事实上,也许还有另一种简单的方法来解决我错过的问题。 我使用“tail -f”,因为我必须分析相当胖(一些GB)日志,这些日志不断附加并且不打算打开它并读取整个文件。 我只需要控制附加行。 但是我发现没有合适的尾部实现

提前致谢。

您无法从java内部执行管道命令。

如果你想要管道输出,执行’/ bin / sh’就像这样:

 String tailCommand = "/bin/sh -c 'tail -f /path/PATH.txt| grep (...)'"; 

此外,您的java程序必须足够快地使用进程的输出,因此其缓冲区不会溢出。

您可能希望阅读本文当Runtime.exec()不会 ,以了解尝试从Java执行进程时常见的陷阱。