Отслеживайте файлы/папки, чтобы получать уведомления об изменениях в UNIX

Требование состоит в том, чтобы отслеживать несколько папок и файлов на предмет любых изменений в UNIX. Мне нужно иметь возможность перехватывать мой java-код для любых изменений, таких как создание/изменение/удаление. Может ли кто-нибудь предложить какие-либо фреймворки на основе Java, чтобы сделать то же самое?


person Mithun    schedule 11.02.2013    source источник


Ответы (3)


Если вы используете Java 7, вы можете использовать API WatchService. для отслеживания изменений в файловой системе.

Если вы застряли на Java 6-, вы можете взглянуть на некоторые альтернативы, предложенные в этом сообщение или этот другой.

person assylias    schedule 11.02.2013
comment
У нас есть ограничение на использование только java 6. Не могли бы вы предложить какую-либо платформу, совместимую с java 6, и с открытым исходным кодом? - person Mithun; 11.02.2013
comment
@Mithun Я добавил две ссылки с библиотеками, совместимыми с Java 6. - person assylias; 11.02.2013

Вы смотрели службу уведомлений о файлах в Java 7?

Пакет java.nio.file предоставляет API уведомления об изменении файла, который называется Watch Service API. Этот API позволяет зарегистрировать каталог (или каталоги) в службе наблюдения. При регистрации вы сообщаете сервису, какие типы событий вас интересуют: создание файла, удаление файла или модификация файла. Когда служба обнаруживает интересующее событие, оно перенаправляется в зарегистрированный процесс. Зарегистрированный процесс имеет поток (или пул потоков), предназначенный для наблюдения за любыми событиями, для которых он зарегистрирован. Когда приходит событие, оно обрабатывается по мере необходимости.

JNotify — это аналогичный сервис/библиотека для тех, кто не может использовать Java 7.

person Brian Agnew    schedule 11.02.2013

Java 7 представила WatchService, который отслеживает зарегистрированные объекты на предмет изменений и событий.

Пример -

Path myDir = Paths.get("D:/test");       

    try {
       WatchService watcher = myDir.getFileSystem().newWatchService();
       myDir.register(watcher, StandardWatchEventKind.ENTRY_CREATE, 
       StandardWatchEventKind.ENTRY_DELETE, StandardWatchEventKind.ENTRY_MODIFY);

       WatchKey watckKey = watcher.take();

       List<WatchEvent<?>> events = watckKey.pollEvents();
       for (WatchEvent event : events) {
            if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) {
                System.out.println("Created: " + event.context().toString());
            }
            if (event.kind() == StandardWatchEventKind.ENTRY_DELETE) {
                System.out.println("Delete: " + event.context().toString());
            }
            if (event.kind() == StandardWatchEventKind.ENTRY_MODIFY) {
                System.out.println("Modify: " + event.context().toString());
            }
        }

    } catch (Exception e) {
        System.out.println("Error: " + e.toString());
    }
}
person Subhrajyoti Majumder    schedule 11.02.2013