在java中,如果找不到输入文件,如何停止裁剪线程

时间:2011-06-18 04:18:51

标签: java taillistener

我正在使用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。

怎么做。

2 个答案:

答案 0 :(得分:0)

使用File.exists()

 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中,有一些用于处理文件系统事件的新类,它们允许应用程序“注意到”文件已被删除/取消链接。