2016-12-14 6 views
4

У меня есть приложение Java, которое контролирует каталог для новых файлов и обрабатывает любой новый файл, который он видит в каталоге. Приложение должно работать как на Linux, так и на окнах env. Проблема заключается в Linux, когда пользователь вручную копирует файл в каталог, приложение выбирает файл, прежде чем он полностью копируется в каталог. У меня пытался заблокировать файл, используя различные методы, но приложение может получить блокировку на файле, даже если файл все еще копируется системой linux. Я также считаю, что проверить файл, используя команду lsof, но она специфична для Linux, поэтому я стараюсь избегать этого.Linux + Java + Windows: проверить, полностью ли скопирован файл


Может кто-то пожалуйста, предложить способ предотвратить неполный файл подхватили приложение? Заранее спасибо.

+0

один подход к этой проблеме - всегда копировать два файла в целевую папку. Сначала вы копируете фактический файл данных в целевую папку, разрешите вызывать этот файл «fileName.dat». После того, как эта копия файла завершится успешно, вы затем создадите фиктивный файл с именем «fileName.done» в целевой папке. Ваше приложение обнаруживает файлы, заканчивающиеся на «.done», и он знает, что «fileName.dat» готов к чтению. – Hector

+0

Это имело бы смысл, если бы мы имели контроль над тем, кто копирует файл в каталоге, к сожалению, мы не знаем, кто будет копировать файл и как его вести. – Prashant

+0

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

ответ

0

Вы можете проверить размер файла в некотором интервале, как 2 секунды, и если его отличается, то файл копируется, если нет, то вы можете пойти :)

0

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

файл # длина

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

+0

Спасибо за ответ, я также рассмотрел это, но это, кажется, не очень чистое решение. Есть ли у вас какие-либо другие предложения? – Prashant

+0

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

0

Возможно, решение является ответом от this. Вы можете попробовать jpoller.

Смежные вопросы