1. 程式人生 > >java監控文件夾的動態

java監控文件夾的動態

放棄 delete 何事 ems stand key out try pri

package com.fenye.puil.usbDemo;


import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class UsbDemo {
public static void main(String[] args) {

//初始化被監控的文件夾
//U盤插入會在此目錄上顯示所以監控,所以實時監控此文件夾就行
final Path path = Paths.get("D://Usb");
//創建WatchService實例,WatchService類似於觀察者模式中的觀察者
try (WatchService service = FileSystems.getDefault().newWatchService()) {
//將path註冊到WatchService中
path.register(service, StandardWatchEventKinds.ENTRY_CREATE,

StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
while (true) {
//註冊監聽服務,獲取事件的各個屬性
//serviec.take()這個方法會一直堵塞,直到某個事件發生。
WatchKey key = service.take();
for (WatchEvent<?> watchEvent : key.pollEvents()) {

final WatchEvent.Kind<?> kind = watchEvent.kind();
//丟失或放棄事件時被觸發
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
//當新的文件夾或者文件出現時
else if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
//final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
//final Path filename = watchEventPath.context();
// print it out
System.out.println("U盤 :" + " 已插入");
}
//當有任意文件被修改時
else if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
System.out.println("========文件被修改========");
}
//當文件夾或者文件消失時
else if (kind == StandardWatchEventKinds.ENTRY_DELETE) {
//final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
//final Path filename = watchEventPath.context();
// print it out
System.out.println("U盤 :" + " 已拔出");

}
}
//WatchKey實例通過poll或者take返回後,就不會捕獲任何事件
//調用reset()方法就可以將這個WatchKey重新回到watchservice隊列,可以重新等待新的事件。
boolean valid = key.reset();
if (!valid) {
break;
}
}
} catch (Exception e) {
System.err.println(e);
}
}
}





java監控文件夾的動態