我正在使用java tail-listener
api来监视来自给定输入日志文件的日志消息。以下是我的代码。
public static void main(String[] args) {
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
File pcounter_log = new File(files);
Tailer logMessages = new Tailer(pcounter_log, new FileListener(files,element.getLogPattern()),
5000, true);
Thread thread = new Thread(logMessages);
thread.start();
}
public class FileListener extends TailerListenerAdapter {
private final String fileName;
public FileListener(String fileName, ArrayList<String> pattern) {
this.fileName = fileName;
}
public void handle(String line) {
System.out.println(fileName+"<---->"+line);
}
}
在上面的代码中,如果在执行过程中找不到任何文件,如何停止相应的tailer。
怎么做。
答案 0 :(得分:0)
if(pcounter_log.exists()) {
Tailer logMessages = new Tailer(pcounter_log, new FileListener(files,element.getLogPattern()),
5000, true);
Thread thread = new Thread(logMessages);
thread.start();
}
答案 1 :(得分:0)
...如果在执行过程中找不到任何文件,如何停止相应的尾标。
根本问题是当您尝试打开文件时“找到”文件。打开后,Java应用程序不需要再次找到它:
在Windows上,操作系统级文件锁定意味着在您的应用程序关闭文件之前,通常无法删除该文件(例如,通过其他应用程序)。
在UNIX / Linux上,文件可以在打开时删除(实际上是“取消链接”),但这不会影响当前打开文件的应用程序。应用程序可以继续读取和写入未链接的文件...即使没有其他应用程序可以打开它。
使用Java 6,判断您当前正在读/写的文件是否已被“删除”的唯一方法是尝试再次打开它。如果你反复这样做,这是昂贵的。在Java 7中,有一些用于处理文件系统事件的新类,它们允许应用程序“注意到”文件已被删除/取消链接。