Я отслеживаю несколько (около 15) путей для входящих файлов, используя Apache Commons FileAlterationMonitor. Эти входящие файлы могут поступать партиями от 1 до 500 файлов одновременно. У меня все настроено, и приложение отслеживает папки, как и ожидалось, у меня настроено опрашивать папки каждую минуту. Моя проблема в том, что, как и ожидалось, слушатель, которого я настроил оповещения для каждого входящего файла, когда все, что мне действительно нужно и нужно, это знать, когда приходит новый пакет файлов. Поэтому я хотел бы получить одно предупреждение в отличие от до 500 одновременно.
Есть ли у кого-нибудь идеи о том, как контролировать количество предупреждений или получать только первое или последнее уведомление или что-то в этом роде? Я хотел бы придерживаться FileAlterationMonitor, если это вообще возможно, потому что он будет работать в течение длительных периодов времени, и поэтому я могу сказать, что в ходе тестирования я не вижу большой нагрузки на систему или замедления работы остальных. приложение закрыто. Но я определенно открыт для других идей, если то, что я ищу, невозможно с помощью FileAlterationMonitor.
public class FileMonitor{
private final String newDirectory;
private FileAlterationMonitor monitor;
private final Alerts gui;
private final String provider;
public FileMonitor (String d, Alerts g, String pro) throws Exception{
newDirectory = d;
gui = g;
provider = pro;
}
public void startMonitor() throws Exception{
// Directory to monitor
final File directory = new File(newDirectory);
// create new observer
FileAlterationObserver fao = new FileAlterationObserver(directory);
// add listener to observer
fao.addListener(new FileAlterationListenerImpl(gui, provider));
// wait 1 minute between folder polls.
monitor = new FileAlterationMonitor(60000);
monitor.addObserver(fao);
monitor.start();
}
}
public class FileAlterationListenerImpl implements FileAlterationListener{
private final Alerts gui;
private final String provider;
private final LogFiles monitorLogs;
public FileAlterationListenerImpl(Alerts g, String pro){
gui = g;
provider = pro;
monitorLogs = new LogFiles();
}
@Override
public void onStart(final FileAlterationObserver observer){
System.out.println("The FileListener has started on: " + observer.getDirectory().getAbsolutePath());
}
@Override
public void onDirectoryCreate(File file) {
}
@Override
public void onDirectoryChange(File file) {
}
@Override
public void onDirectoryDelete(File file) {
}
@Override
public void onFileCreate(File file) {
try{
switch (provider){
case "Spectrum": gui.alertsAreaAppend("New/Updated schedules available for Spectrum zones!\r\n");
monitorLogs.appendNewLogging("New/Updated schedules available for Spectrum zones!\r\n");
break;
case "DirecTV ZTA": gui.alertsAreaAppend("New/Updated schedules available for DirecTV ZTA zones!\r\n");
monitorLogs.appendNewLogging("New/Updated schedules available for DirecTV ZTA zones!\r\n");
break;
case "DirecTV RSN": gui.alertsAreaAppend("New/Updated schedules available for DirecTV RSN zones!\r\n");
monitorLogs.appendNewLogging("New/Updated schedules available for DirecTV RSN zones!\r\n");
break;
case "Suddenlink": gui.alertsAreaAppend("New/Updated schedules available for Suddenlink zones!\r\n");
monitorLogs.appendNewLogging("New/Updated schedules available for Suddenlink zones!\r\n");
break;
}
}catch (IOException e){}
}
@Override
public void onFileChange(File file) {
}
Выше приведен класс FileMonitor и переопределенный FileAlterationListener, который у меня есть до сих пор.
Любые предложения будут с благодарностью.