в Java, как получить имя файла в потоке - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть ArrayList, называемый fileList.Содержит список имен файлов.Через цикл for я создаю поток для каждого имени файла и отслеживаю его, используя TailListener Java API.Теперь я хочу получить имя файла для каждого сообщения, присутствующего в файлах.

fileListener= new fileListener();

for(int i=0;i<fileList.Size();i++)
{           
   monitorFile(filelist.get(i));            
}

private void monitorFile(String logFile) {

         File pcounter_log = new File(logFile);

         Tailer = new Tailer(pcounter_log, fileListener, 5000);   

         ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);    
    }


public class fileListener extends TailerListenerAdapter {

String s= "abc";

    public void handle(String line) {

            if(line.contains(s)){
                System.out.println(line);
            }
    }
}

В приведенном выше коде как получить имя файла для соответствующих сообщений журнала?

1 Ответ

3 голосов
/ 11 апреля 2011

Один простой способ - использовать отдельных слушателей для каждого файла:

Измените класс fileListener на что-то вроде этого:

public class FileListener extends TailerListenerAdapter {

    private final String fileName;

    public FileListener(String fileName) {
         this.fileName = fileName;
    }

    public void handle(String line) {
         if(line.contains(s)){
             System.out.println(fileName + ": " + line);
         }
    }
}

Затем просто создайте новый экземпляр FileListenerдля каждого отслеживаемого файла:

private void monitorFile(String logFile) {
     File pcounter_log = new File(logFile);
     Tailer = new Tailer(pcounter_log, new FileListener(logFile), 5000);   
     ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...