в Java, как остановить поток Tailer, если входной файл не найден - PullRequest
0 голосов
/ 18 июня 2011

Я использую 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); 
    }
}

В приведенном выше коде, если какой-либо файл не найден в середине выполнения, как остановить соответствующий тейлер.

как это сделать.

Ответы [ 2 ]

0 голосов
/ 18 июня 2011

... если какой-либо файл не найден в середине выполнения, как остановить соответствующий тейлер.

Основная проблема заключается в том, что файл «найден» при попытке открыть его. После открытия приложению Java больше не нужно его искать:

  • В Windows блокировка файла на уровне ОС означает, что файл обычно не может быть удален (например, другим приложением), пока ваше приложение не закроет его.

  • В UNIX / Linux файл может быть удален (фактически «несвязан»), пока он открыт, но это не влияет на приложение, в котором в данный момент открыт файл. Приложение может продолжать читать и записывать несвязанный файл ... даже если никакое другое приложение не может открыть его.

В Java 6 единственный способ определить, был ли файл, который вы сейчас читаете / пишете, был «удален», - это попытаться открыть его снова. Это дорого, если вы делаете это неоднократно. В Java 7 появились новые классы для обработки событий файловой системы, которые позволили бы вашему приложению «заметить», что файл был удален / удален.

0 голосов
/ 18 июня 2011

Использование 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();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...