我有一个名为 fileList
的 ArrayList
。它包含文件名列表。通过 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);
}
}
}
在上面的代码中,如何获取相应日志消息的文件名?
最佳答案
一种简单的方法是为每个文件使用单独的监听器:
将您的 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);
}
关于java - 在java中,如何在线程中获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5617809/