我正在使用WatchService API觀看目錄,並在用戶開始將文件複製到目錄時獲取ENTRY_CREATE事件。儘管我正在使用的文件可能很大,並且我想知道副本何時完成。是否有任何內置的Java API可用於實現此目標,或者我最好只跟蹤創建的文件的大小,並在大小停止增長時開始處理?如何判斷文件何時「完成」複製到監視目錄中?
編輯:這裏是我的示例代碼:
package com.example;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
public class Monitor {
public static void main(String[] args) {
try {
String path = args[0];
System.out.println(String.format("Monitoring %s", path ));
WatchService watcher = FileSystems.getDefault().newWatchService();
Path watchPath = FileSystems.getDefault().getPath(path);
watchPath.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY);
while (true) {
WatchKey key = watcher.take();
for (WatchEvent<?> event: key.pollEvents()) {
Object context = event.context();
System.out.println(String.format("Event %s, type %s", context, event.kind()));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
產生這樣的輸出:
Monitoring /Users/ericcobb/Develop/watch
Event .DS_Store, type ENTRY_MODIFY
Event 7795dab5-71b1-4b78-952f-7e15a2f39801-84f3e5daeca9435aa886fbebf7f8bd61_4.mp4, type ENTRY_CREATE
有趣的是,這實際上是我所預期的/期望的行爲,但不是我所看到的。我添加了一些代碼和示例輸出,你看到什麼東西出來嗎? – eric
@eric也許它正在與創建滾動修改? – Jeffrey
@傑弗裏這很清楚。問題是如何發現這是最後一次ENTRY_MODIFY,因爲我得到了它們中的幾個(centos)。你可以解釋嗎? – 2014-05-01 17:25:16