У меня была похожая проблема. Сначала я подумал, что могу использовать службу FileWatcher, но она не работает на удаленных томах, и мне приходилось отслеживать входящие файлы через сетевой диск.
Тогда я подумал, что могу просто следить за изменением размера файла в течение определенного периода времени и считать, что файл готов, как только размер файла стабилизируется (как предложил fmucar). Но я обнаружил, что в некоторых случаях для больших файлов хост-система сообщает о полном размере копируемого файла, а не о количестве байтов, записанных на диск. Это, конечно, сделало файл стабильным, и мой детектор перехватил файл, пока он еще находился в процессе записи.
Я в конечном итоге смог заставить монитор работать, применив исключение FileInputStream, которое чудесно работало при определении того, записывается ли файл, даже когда файл находился на подключенном к сети диске.
long oldSize = 0L;
long newSize = 1L;
boolean fileIsOpen = true;
while((newSize > oldSize) || fileIsOpen){
oldSize = this.thread_currentFile.length();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
newSize = this.thread_currentFile.length();
try{
new FileInputStream(this.thread_currentFile);
fileIsOpen = false;
}catch(Exception e){}
}
System.out.println("New file: " + this.thread_currentFile.toString());