Java: обнаружение модификации файла (опрос файла?)

Каков наиболее эффективный способ обнаружения модификации файла в Java?

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

Учитывая, что в настоящее время я намерен «смотреть» только 2 файла, я все еще открыт для решения для опроса файлов. В идеале я надеюсь, что опрос файлов не окажет большого влияния на производительность.

Я знаю о WatchService Java 7, но, поскольку 7 официально не выпущен, я не решаюсь использовать этот подход или библиотеки JNI.

Очень признателен!

РЕДАКТИРОВАТЬ: кажется, что опрос файлов - это путь. Если кто-нибудь может порекомендовать самый безопасный/эффективный способ реализации опроса файлов, это было бы здорово.


person user459811    schedule 08.10.2010    source источник
comment
для чего ты собираешься его использовать? Передача файлов?   -  person oluies    schedule 08.10.2010
comment
Я планирую построить регистратор с помощью log4j. Поэтому мне нужен способ отслеживать любые изменения в файлах конфигурации log4j, чтобы я мог перезагрузить его.   -  person user459811    schedule 09.10.2010


Ответы (2)


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

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

person Erick Robertson    schedule 08.10.2010
comment
Истинный. Все решения обратного вызова обновления файловой системы, связанные с ОС, о которых я читал, указывают на JNI, который я также не использую. Я думаю, это опрос файлов! :) Теперь, чтобы найти лучшее решение для этого. - person user459811; 08.10.2010
comment
Лично я бы просто написал что-то короткое, простое и по делу, которое делало именно то, что мне было нужно. Я не удивлюсь, если jpoller сработает, как предложил @Brent. jnotify выглядит так, как будто ему нужны дополнительные библиотеки, и мне не нравятся Java-решения, которые требуют этого. - person Erick Robertson; 09.10.2010
comment
обязательно не оставляйте ссылки на файлы открытыми в течение длительного периода времени. Что вы имеете в виду, закрывая их между циклами опроса, чтобы избежать конфликтов? Я думал о том, чтобы мой опрос файлов всегда оставался активным, потому что невозможно сказать, когда пользователь может захотеть изменить файл, поэтому слушатель должен быть готов обнаружить такую ​​​​активность в любое время. Когда циклы опроса будут конфликтовать, если постоянно открыт один экземпляр? Спасибо! :) - person user459811; 09.10.2010
comment
В каждом цикле опроса вы должны обязательно закрывать все дескрипторы открытых файлов, когда закончите опрос. Поэтому, если вы открываете файл по какой-либо причине, вы должны закрыть его. Не оставляйте его открытым в течение 30 секунд до следующего цикла опроса. (или как бы долго это ни было) - person Erick Robertson; 10.10.2010
comment
О, понятно, закрыть каждый файл, который был открыт во время каждого интервала опроса, независимо от того, насколько он короткий. Я опрашиваю каждую секунду, чтобы проверить время последнего изменения файла. Кажется, это работает до сих пор. Надеюсь, проблем с производительностью не будет. Спасибо за вашу помощь! - person user459811; 11.10.2010

Вот две доступные библиотеки:

Java 7 NIO2 также может предложить вам кое-что (я не знаю, есть ли эти функции в объем для Java 7 на данный момент) Также доступен как JSR 203 см. здесь

person oluies    schedule 08.10.2010