2011-04-11 67 views
0

我有一个ArrayList调用fileList。它包含一个文件名列表。通过for循环,我正在为每个文件名创建线程,并使用 Java API监视文件。现在我想获取文件中存在的每条消息的文件名。在java中,如何获得线程中的文件名称

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); 
      } 
    } 
} 

在上面的代码中,如何获取相应日志消息的文件名?

+0

什么对应的日志消息?恐怕你的问题很不明确。请阅读http://tinyurl.com/so-hints并编辑您的问题以提供更多信息。 – 2011-04-11 07:01:03

回答

3

一个简单的方法是使用单独的侦听器为每个文件:

更改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);  
} 
相关问题