当前位置: 首页 > 面试题库 >

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

管炳
2023-03-14
问题内容

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


问题答案:

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

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



 类似资料:
  • 就是打印一个文件,并且监视,或者等待它的追加,如果有,就把追加的内容也打印.

  • 问题内容: 我在Python中有这个方便的功能: 它的作用类似于UNIX :文件的最后几行出现。这是方便,因为你可以得到发电机 无阻塞 ,并将它传递给另一个函数。 然后我必须在Go中执行相同的操作。我是该语言的新手,所以不确定我所做的操作是否足够习惯/正确。 这是代码: Go中有没有更干净的方法可以做到这一点?我觉得对这样的事情使用异步调用实在是太过分了,这确实让我感到困扰。 问题答案: 我建议围

  • 问题内容: 将Docker for Mac 1.13.1与以下Dockerfile一起使用: 使用以下内容的contab文件: 当我使用以下命令构建和运行它时: 我看到输出: 如果我等待一分钟,则不会出现输出。但是,如果我登录到正在运行的容器并拖尾文件,则可以看到内容: 我尝试在CMD的末尾添加另一个回显,以查看是否只是吞没了STDOUT的最后一个命令,但这没有帮助。 我已经将代码发布在githu

  • 本文向大家介绍一个简单的linux命令 tail,包括了一个简单的linux命令 tail的使用技巧和注意事项,需要的朋友参考一下 tail命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容. 命令格式 tail[必要参数][选择参数][

  • 问题内容: 这个命令确实非常有用,但是我可以在其中获取源代码以查看内部发生了什么。 谢谢 。 问题答案: tail实用程序是linux上coreutils的一部分。 原始档:ftp : //ftp.gnu.org/gnu/coreutils/coreutils-7.4.tar.gz 源文件:http : //git.savannah.gnu.org/cgit/coreutils.git/tree/

  • 问题内容: 您将如何实现一个包含文本区域的jsp站点,该文本区域显示(tomcat)服务器上的日志文件并自动刷新。 我认为刷新很容易使用setTimeout轮询到服务器并发送ajax请求。但是问题是如何监视服务器上的文件(它是一个Log4J日志文件- 也许我可以使用自己的附加程序?)进行更改,并在ajax请求到达时仅发送更改后的行? 我不知道如何检测日志中更改的行… 问题答案: ajax并每隔几秒