JAVA NIO Watcher: Как определить конец длительной операции (копирования)?

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

Поэтому при доступе к файлу я получаю ACCESS_DENIED, «заблокирован другим процессом».

Предоставляет ли NIO что-то вроде «LOCK Released» или мне нужно как-то опросить файл, чтобы блокировка была снята? Как описано здесь: http: //stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complete-in-java-1-6

Спасибо за любую помощь.

Герд


person user1226230    schedule 17.01.2013    source источник


Ответы (2)


скопируйте файл в другой каталог; после этого переместите его в наблюдаемый каталог.

java.nio.file.Files.move(srcFile, targetFile, StandardCopyOption.ATOMIC_MOVE);

наблюдатель увидит одно событие CREATE

person irreputable    schedule 17.01.2013
comment
Спасибо за комментарий. Я проверю. Но, как указано в комментарии ниже, операция копирования выполняется без моего влияния. Иногда это FTP, иногда через SMB / SAMBA. Чтобы найти конец операции копирования, я попытался контролировать файл, записанный с помощью: - File.isModified () - File.length () - File.isWrite () - person user1226230; 18.01.2013

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

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

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

person Werner Kvalem Vesterås    schedule 17.01.2013
comment
Я не могу повлиять на операцию копирования в наблюдаемый каталог. Это просто происходит откуда-то извне. - person user1226230; 18.01.2013