Hi all, 想請問大家都怎麼偵測大檔案copy完成了呢?
使用情境是:
user丟大型檔案到指定資料夾 > 抓到這個事件 > 做其他事情
問題點:
現在卡在"抓到這個事件"有點不太好處理, 想請各位版友分享類似經驗
已嘗試方法:
1) 透過 nio 的 WatchService
這個方法基本上就是google的第一種解法, 透過 nio 的 WatchService,
註冊 ENTRY_MODIFY/ENTRY_CREATE 可偵測到檔案有變動or新增
但無法無法知道何時copy完成
2) 在 nio 的 WatchService 判斷
天真如我, 在每次 ENTRY_MODIFY 事件發生時, 將 Path 轉為 File,
判斷檔案是否可用
File f = path.toFile();
if(f.canWrite()){ ... }
會用 canWrite() 判斷是因為有爬到說在copy時檔案不能編輯
這個方法我一直覺得可能是我哪邊寫錯了, 因為我覺得應該要可以 Orz
3) 定時爬一次資料夾
這是土炮, 也是唯一成功的一種...
for(;;){ ...; Thread.sleep(5000); }
不想用這種方法的原因是, 類似的回答在 stackoverflow 被推到 -1x
也有人點出效能的問題
以上是我嘗試過的幾種方式, 不知道有沒有其他我沒想過的做法可以提供參考
跪謝