2012-04-19 2 views
2

Я пытаюсь обрабатывать изменения в файле или в подпапке папки, а затем загружать их FTP (например, синхронизированную папку), но я не знаю, как это сделать .. кто-нибудь может дать мне подсказки или где найти/умереть за это? Id скорее сделает это на Java.Как получить изменения в файлах и подпапках основной папки?

Спасибо!

+1

Рассматривали ли вы 'rsync'? –

+0

Существует также JNotify. – Gandalf

+0

Пожалуйста, примите ответ, если он вам помог, потому что будет легче найти его для других, если у них будет такая же проблема, как у вас. – LaGrandMere

ответ

4

Watch for Changes in a Directory

Выдержки из этого учебника:

Создание службы Часы и регистрации для событий

Первый шаг заключается в создании нового WatchService с помощью метода newWatchService в классе FileSystem, а следует:

WatchService watcher = FileSystems.getDefault().newWatchService(); 

Затем зарегистрируйте один или несколько объектов в сервисе просмотра. Любой объект, который реализует интерфейс Watchable, может быть зарегистрирован. Класс Path реализует интерфейс Watchable, поэтому каждый контролируемый каталог регистрируется как объект Path.

Как и в случае с любым наблюдаемым, класс Path реализует два метода регистрации. Эта страница использует версию с двумя аргументами, register (WatchService, WatchEvent.Kind ...). (В версии с тремя аргументами используется WatchEvent.Modifier, который в настоящее время не реализован.)

При регистрации объекта с помощью службы просмотра вы указываете типы событий, которые вы хотите контролировать. Поддерживаемые типы StandardWatchEventKinds событий следуют:

ENTRY_CREATE – A directory entry is created. 
ENTRY_DELETE – A directory entry is deleted. 
ENTRY_MODIFY – A directory entry is modified. 
OVERFLOW – Indicates that events might have been lost or discarded. You do not have to register for the OVERFLOW event to receive it. 

Следующий фрагмент кода показывает, как зарегистрировать экземпляр Path для всех трех типов событий:

import static java.nio.file.StandardWatchEventKinds.*; 

Path dir = ...; 
try { 
    WatchKey key = dir.register(watcher, 
          ENTRY_CREATE, 
          ENTRY_DELETE, 
          ENTRY_MODIFY); 
} catch (IOException x) { 
    System.err.println(x); 
Смежные вопросы