概述
如果需要监视附加到文件末尾的行,通常使用带有“ -f ”参数的 UNIX 实用程序“ tail ”来实现。这是一个例子:
tail -f /var/log/auth.log
如果不仅需要监控附加到文件末尾的新行,还需要在您的应用程序中处理它们怎么办?幸运的是,有一些易于使用的解决方案,本文将介绍其中之一。 Apache Commons IO 提供了解决上述问题的功能。
依赖项
首先,必须添加相应的依赖项:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
应用
让我们创建一个应用程序来处理附加到文件末尾的行。
import java.io.File;
import org.apache.commons.io.input.Tailer;
import org.apache.commons.io.input.TailerListenerAdapter;
public class TailerApp {
private static class NewLineListener extends TailerListenerAdapter {
@Override
public void handle(String line) {
System.out.println(line);
}
}
private final File file;
private final long delay;
private final TailerListenerAdapter newLineHandler;
public TailerApp(File file, long delay, TailerListenerAdapter newLineHandler) {
this.file = file;
this.delay = delay;
this.newLineHandler = newLineHandler;
}
public void run() {
Tailer tailer = new Tailer(file, newLineHandler, delay);
tailer.run();
}
public static void main(String[] args) {
TailerApp tailer = new TailerApp(new File("C:\\inetpub\\logs\\LogFiles\\W3SVC1\\u_ex220730.log"), 500, new NewLineListener());
tailer.run();
}
}
必须指定三个参数:
- 监控文件
- 延迟(检查文件更改的频率)
- 回调以处理新行
要测试应用程序,让我们运行它并在同一文件夹中执行以下命令:
echo -e "test1" >> test.txt
echo -e "test2" >> test.txt
echo -e "test3" >> test.txt
这些命令将行附加到名为“test.txt”的文件的末尾,我们希望看到它们被我们的应用程序处理。
让我们看一下应用程序的输出:
test1
test2
test3
因此,应用程序已成功检测到文件中的新行并对其进行处理