我想知道使用什么技术和/或库来实现linux命令“ tail -f”的功能。我本质上是在寻找的附加组件/替代产品java.io.FileReader。客户端代码可能如下所示:
tail -f
java.io.FileReader
TailFileReader lft = new TailFileReader("application.log"); BufferedReader br = new BufferedReader(lft); String line; try { while (true) { line= br.readLine(); // do something interesting with line } } catch (IOException e) { // barf }
缺少的部分是的合理实现TailFileReader。它应该能够读取文件打开之前存在的部分以及添加的行。
TailFileReader
能够继续读取文件,并等待文件有更多更新的能力,自己编写代码并不难。这是一些伪代码:
BufferedReader br = new BufferedReader(...); String line; while (keepReading) { line = reader.readLine(); if (line == null) { //wait until there is more of the file for us to read Thread.sleep(1000); } else { //do something interesting with the line } }
我假设你希望将这种功能放在其自己的线程中,以便可以使其hibernate而不影响应用程序的任何其他区域。你可能希望公开keepReading一个setter,以便你的主类/应用程序的其他部分可以安全地关闭线程而不会造成其他麻烦,只需调用stopReading()或类似方法即可。
keepReading
setter
stopReading()