一尘不染

Java Unix / Linux“ tail -f”的Java IO实现

java

我想知道使用什么技术和/或库来实现linux命令“ 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。它应该能够读取文件打开之前存在的部分以及添加的行。


阅读 562

收藏
2020-03-03

共1个答案

一尘不染

能够继续读取文件,并等待文件有更多更新的能力,自己编写代码并不难。这是一些伪代码:

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()或类似方法即可。

2020-03-03