Это в Grails, и я использую библиотеку FileUtils
из общей известности Apache. Функция sizeof
возвращает размер в байтах.
def fileModified = sourceFile.lastModified()
def fileSize = FileUtils.sizeOf(sourceFile)
Thread.sleep(3000) //sleep to calculate size difference if the file is currently getting copied
if((fileSize != FileUtils.sizeOf(sourceFile)) && (fileModified != sourceFile.lastModified())) //the file is still getting copied to return
{
if(log.infoEnabled)
log.info("File is getting copied!")
return
}
Thread.sleep(1000) //breather for picking up file just copied.
Обратите внимание, что это также зависит от того, какую утилиту или ОС вы используете для передачи файлов.
Самая безопасная ставка - скопировать файл, который был скопирован или был скопирован в другой файл или каталог. Процесс копирования является надежным, и он гарантирует вам, что файл присутствует после процесса копирования. Тот, который я использую, из API общих ресурсов.
FileUtils.copyFileToDirectory (файл f, каталог D)
Если вы копируете огромный файл, который находится в процессе копирования, остерегайтесь, что это займет время, и вы можете запустить его в параллельном потоке или лучше всего иметь отдельное приложение, предназначенное для процесса передачи.