Обработчик событий операционной системы, использующий Java - PullRequest
3 голосов
/ 07 июля 2011

У меня есть Java-процесс, который работает как демон, он контролирует directroy в файловой системе, после добавления нового файла в каталог, Java-процесс будет обрабатывать этот файл, выполняя некоторую логику над ним, в настоящее время в моей реализации. демон проверяет папку каждые 10 секунд, и в случае добавления нового файла он начинает обрабатывать его.

существует ли способ, которым папка будет уведомлять процесс о добавлении нового файла, и затем процесс может начать работать с ним, своего рода обработчик событий в папке, которой он сам является на уровне ОС с помощью API Java, может я делаю это в Java?

Ответы [ 4 ]

2 голосов
/ 08 июля 2011

Я думаю, что проблема, с которой вы столкнетесь, - это одновременный доступ к одному и тому же файлу.Если он все еще записывается, то вы не можете получить эксклюзивный доступ к файлу ... и нет никакой гарантии, что файл даже содержит какие-либо данные.Вы, вероятно, можете (ab) использовать этот факт, чтобы увидеть, действительно ли файл готов.

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

Посмотрите на java.nio.channels.FileLock и посмотрите, будет ли это работать для вас.(http://download.oracle.com/javase/6/docs/api/java/nio/channels/FileLock.html)

2 голосов
/ 08 июля 2011

Пока вы можете использовать существующую утилиту, такую ​​как jfilenotify , но она станет одной из новых функций в Java 7 .

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

2 голосов
/ 08 июля 2011

Нет способа, о котором я знаю. В любом случае, для папки, уведомляющей о чем-либо, вам, вероятно, придется изменить (создать свой собственный) драйвер файловой системы.

Системное событие сильно зависит от ОС, а Java спроектирована как противоположность.

Зависит от того, как быстро вы хотите, чтобы ваш демон ответил. Используя метод сна, вы можете сократить время сна, но при этом будет использоваться больше циклов ЦП.

1 голос
/ 08 июля 2011

Если вы используете Java 7, попробуйте прочитать это .Есть класс WatchService, который может обрабатывать то, что вы хотите.

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