Можно ли контролировать папку с помощью кода Java?


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

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

или есть какие-то рамки или какой-то демонстрационный код для этого? надеюсь, мы могли бы найти лучший способ сделать это. большое спасибо.

Ответы на вопрос(4)

http://mindprod.com/jgloss/filemonitor.html это бесплатно иhttp://www.teamdev.com/jxfilewatcher это не бесплатно

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

 Barry Wei28 сент. 2010 г., 10:42
через JNI, что означает написание кроссплатформенного кода для Java, мне кажется, что это неправильно.
 Barry Wei28 сент. 2010 г., 10:47
jxfilewatcher не является бесплатным. Я думаю, что мы могли бы найти программное обеспечение с открытым исходным кодом или библиотеку для этого. если нет, я напишу это.
 Manuel Selva28 сент. 2010 г., 11:02
Первая ссылка, которую я послал, является бесплатной, я думаю

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

Сейчас вы можете попробоватьjpathwatch, который является реализациейWatchService интерфейс и использует собственные функции ОС, вместо опроса.

 Barry Wei28 сент. 2010 г., 10:39
Я думаю, что я должен ждать это долгое время, потому что мой текущий JRE - JRE6.
 Barry Wei28 сент. 2010 г., 10:50
Я проверил этот WatchService, это здорово, но только жаль, что он будет доступен только после jdk7.

который опрашивает каталог и отслеживает изменения.

Более эффективным способом было бы написать специфическую для ОС библиотеку (вам, вероятно, придется делать это на C или C ++), которая может использовать специфичные для ОС инструменты для получения уведомления (посредством обратного вызова в ваш Java-код) и вызывать ее через JNI

 PaulJWilliams28 сент. 2010 г., 10:52
Правда. Вы можете закодировать его таким образом, чтобы, если вы работаете в ОС, где у вас есть библиотека, код использует ее, в противном случае по умолчанию используется чисто Java-решение. На самом деле, как уже упоминалось в других ответах, это то, что происходит в Java 7
 Barry Wei28 сент. 2010 г., 10:41
хорошая идея. но если я использую специфическую для ОС библиотеку, это означает, что мое приложение не сможет работать в разных ОС.
Решение Вопроса

Для наблюдения за папкой в ​​Java обычным способом является управление ею в отдельном потоке с помощью цикла. Для экономии ресурсов процессора вы можете использовать темп (проверять каждые n секунд).

Затем, чтобы уведомить об изменении из этой темы, вы можете использоватьШаблон "Наблюдатель".

 Barry Wei28 сент. 2010 г., 10:45
да, я знаю, что об этом взгляде нужно заботиться. проверка папки каждые n секунд будет делать это хорошо, но как мне определить такие секунды, потому что этот код будет работать для разных процессоров и разных ОС. это не легко, если я хочу сохранить процессор и другие вещи. но спасибо твой ответ.

Ваш ответ на вопрос