[問題] 偵測大型檔案copy完成
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
也有人點出效能的問題
以上是我嘗試過的幾種方式, 不知道有沒有其他我沒想過的做法可以提供參考
跪謝
--
不菸不酒,沒有朋友
有菸有酒,癌症好友
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.224.100.95
※ 文章網址: https://www.ptt.cc/bbs/java/M.1470329900.A.A79.html
推
08/05 01:56, , 1F
08/05 01:56, 1F
→
08/05 01:56, , 2F
08/05 01:56, 2F
謝謝 可以詳述一下這是怎麼做的嗎@@?
只有兩個function name 我參悟不出來 Orz
※ 編輯: love112302 (61.224.100.95), 08/05/2016 08:45:11
→
08/05 09:11, , 3F
08/05 09:11, 3F
→
08/05 09:11, , 4F
08/05 09:11, 4F
→
08/05 09:13, , 5F
08/05 09:13, 5F
→
08/05 09:13, , 6F
08/05 09:13, 6F
Hi, 謝謝您的意見, 但是 copy檔案這個部分不是我做的
是使用者自行丟檔案到特定資料夾, 所以好像沒辦法這樣做 @@?
→
08/05 11:50, , 7F
08/05 11:50, 7F
→
08/05 11:51, , 8F
08/05 11:51, 8F
→
08/05 11:56, , 9F
08/05 11:56, 9F
→
08/05 12:03, , 10F
08/05 12:03, 10F
謝謝 想請問批次是指 batch?
不好意思這塊不太熟, 我原本也是想用 batch 來監看資料夾,
如果copy完成, 執行特定的 jar 檔案, 但因為command line 指令不熟放棄 T__T
※ 編輯: love112302 (114.46.155.75), 08/05/2016 15:27:26
推
08/05 16:17, , 11F
08/05 16:17, 11F
→
08/05 16:19, , 12F
08/05 16:19, 12F
推
08/05 16:21, , 13F
08/05 16:21, 13F
→
08/05 16:21, , 14F
08/05 16:21, 14F
→
08/05 16:22, , 15F
08/05 16:22, 15F
→
08/05 16:22, , 16F
08/05 16:22, 16F
推
08/05 16:24, , 17F
08/05 16:24, 17F
→
08/05 16:25, , 18F
08/05 16:25, 18F
→
08/05 16:26, , 19F
08/05 16:26, 19F
謝謝, 我對Thread 真的不熟...Orz
想請問檢查MD5 的部分是指 來源 跟 複製檔案的 md5 嗎?
比方說:
c:\source\from.big.file.txt
跟
d:\des\from.big.file.txt
這兩個檔案的 md5 嗎? 還是 ?
謝謝您的回覆
→
08/05 17:09, , 20F
08/05 17:09, 20F
→
08/05 17:09, , 21F
08/05 17:09, 21F
→
08/05 17:10, , 22F
08/05 17:10, 22F
→
08/05 17:10, , 23F
08/05 17:10, 23F
→
08/05 17:11, , 24F
08/05 17:11, 24F
→
08/05 17:12, , 25F
08/05 17:12, 25F
→
08/05 17:14, , 26F
08/05 17:14, 26F
→
08/05 17:15, , 27F
08/05 17:15, 27F
→
08/05 17:15, , 28F
08/05 17:15, 28F
→
08/05 17:16, , 29F
08/05 17:16, 29F
※ 編輯: love112302 (114.46.155.75), 08/05/2016 18:02:34
謝謝您~ 但是我沒有辦法要求使用者的動作
他們只想要把檔案拉進去這個資料夾就沒事了 Orz
我是有看到有人使用 File.length() 的方式, 然後幾秒沒有更新,
就判斷 File is ready
但是我在 WatchService 裡面用 Path.toFile().length() 每次都是 0 T___T
※ 編輯: love112302 (114.46.155.75), 08/05/2016 18:05:29
推
08/05 19:18, , 30F
08/05 19:18, 30F
→
08/05 19:19, , 31F
08/05 19:19, 31F
推
08/05 19:49, , 32F
08/05 19:49, 32F
→
08/05 19:50, , 33F
08/05 19:50, 33F
→
08/05 19:51, , 34F
08/05 19:51, 34F
→
08/05 19:53, , 35F
08/05 19:53, 35F
→
08/05 19:53, , 36F
08/05 19:53, 36F
謝謝, 想請問 即使是抓到 create 跟 modify 事件, 要如何判斷
因為我在最後一次觸發 Modify 的時候 去檢查檔案
File.canWrite() or File.length() 都沒有用 :(
→
08/05 23:08, , 37F
08/05 23:08, 37F
→
08/05 23:08, , 38F
08/05 23:08, 38F
但是就覺得是個技術債, 有一種遲早要還的感覺 XD
可能是因為死線還沒到 所以還不願意放行XD
推
08/05 23:12, , 39F
08/05 23:12, 39F
謝謝 我來研究一下這是什麼意思XD
推
08/06 19:00, , 40F
08/06 19:00, 40F
※ 編輯: love112302 (61.224.156.163), 08/07/2016 22:46:43
推
08/07 23:31, , 41F
08/07 23:31, 41F
→
08/07 23:31, , 42F
08/07 23:31, 42F
→
08/07 23:31, , 43F
08/07 23:31, 43F
→
08/07 23:32, , 44F
08/07 23:32, 44F
→
08/07 23:32, , 45F
08/07 23:32, 45F
→
08/07 23:32, , 46F
08/07 23:32, 46F
→
08/07 23:33, , 47F
08/07 23:33, 47F
※ 編輯: love112302 (61.224.156.163), 08/07/2016 23:36:17
推
08/25 00:52, , 48F
08/25 00:52, 48F
→
08/27 22:40, , 49F
08/27 22:40, 49F
→
08/27 22:40, , 50F
08/27 22:40, 50F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
10
50
java 近期熱門文章
PTT數位生活區 即時熱門文章