Как я могу получать события файловой системы Windows на Java? - PullRequest
7 голосов
/ 21 июля 2009

Мне нужно знать, когда в каталоге появляется новый файл. Очевидно, я мог бы периодически опрашивать файловую систему, но в этом есть все обычные недостатки механизмов опроса.

Я знаю, что windows поддерживает события файловой системы , и этот проект уже ограничен платформой Windows другими требованиями.

Есть ли у кого-нибудь опыт получения событий файловой системы Windows внутри JVM? Если да, то какие передовые практики, шаблоны и / или библиотеки вы использовали?

Быстрый Google находит эту библиотеку . У кого-нибудь есть опыт (или любой другой), которым он хотел бы поделиться?

Ответы [ 6 ]

7 голосов
/ 21 июля 2009

Я думаю, что это одна из ключевых функций Java 7, когда она более доступна. Пример кода из блога Sun на Java 7:

импорт статического java.nio.file.StandardWatchEventKind. *;

Path dir = ...;
try {
    WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
} catch (IOException x) {
    System.err.println(x);
}
2 голосов
/ 01 октября 2010

Для Java 6 или более ранней версии используйте JNA 's com.sun.jna.platform.win32.FileMonitor.

1 голос
/ 14 декабря 2011

Вы можете использовать открытую среду JPollar для опроса каталога во временных интервалах. Это также позволяет опрос на основе времени.

1 голос
/ 01 октября 2010

Рекомендация Брайана Агнью о JNotify хороша: Существует ли сложный монитор файловой системы для Java, который является бесплатным или открытым исходным кодом?

Описание от http://jnotify.sourceforge.net/:

JNotify - это библиотека java, которая позволяет приложению java прослушивать события файловой системы, такие как:

  • Файл создан
  • Файл изменен
  • Файл переименован
  • Файл удален
1 голос
/ 21 июля 2009

Для чего-то довольно низкого уровня и специфичного для ОС, подобного, потребуется нативный код (по ссылке, которую вы упомянули). Эта библиотека выглядит относительно маленькой, поэтому в худшем случае вы могли бы решить любые проблемы, если ваш C ++ достаточно хорош.

Если вы можете вообще избежать этого, я бы предложил не использовать нативный код - библиотека или нет. Что такого сложного в вашем сценарии, что вы не можете провести опрос в фоновом режиме?

0 голосов
/ 21 июля 2009

Если вы не используете Jdk7, вам придется использовать JNI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...