WatchKey java.nio.file.Path.register(WatchService watcher, Kind<?>... events) throws IOException
为该文件注册watch service。
Registers the file located by this path with a watch service.
WatchKey java.nio.file.WatchService.take() throws InterruptedException
检索并移除下一个watch key。若没有可检索的则阻塞。
Retrieves and removes next watch key, waiting if none are yet present.
为该文件注册watch service。
Registers the file located by this path with a watch service.
WatchKey java.nio.file.WatchService.take() throws InterruptedException
检索并移除下一个watch key。若没有可检索的则阻塞。
Retrieves and removes next watch key, waiting if none are yet present.
List<WatchEvent<?>> java.nio.file.WatchKey.pollEvents()
检索并移除所有该watch key
Retrieves and removes all pending events for this watch key, returning a List of the events that were retrieved.
Kind<?> java.nio.file.WatchEvent.kind()
返回事件种类
Returns the event kind.
String java.nio.file.WatchEvent.Kind.name()
返回事件种类的名字。
Returns the name of the event kind.
? java.nio.file.WatchEvent.context()
返回事件发生的环境,简单讲就是不带路径的文件名。
Returns the context for the event.
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import static java.nio.file.StandardWatchEventKinds.*;
public class TestWatcherService {
private WatchService watcher;
public TestWatcherService(Path path)throws IOException{
watcher = FileSystems.getDefault().newWatchService();
path.register(watcher, ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY);
}
public void handleEvents() throws InterruptedException{
while(true){
WatchKey key = watcher.take();
for(WatchEvent event : key.pollEvents()){
Kind kind = event.kind();
if(kind == OVERFLOW){//事件可能lost or discarded
continue;
}
Path fileName = (Path) event.context();
System.out.printf("Event %s has happened,which fileName is %s%n"
,kind.name(),fileName);
}
//这行必须有,不然不能连续地监控目录
if(!key.reset()){
break;
}
}
}
public static void main(String args[]) throws IOException, InterruptedException{
new TestWatcherService(Paths.get("c:\\t\\")).handleEvents();
}
}
/*
* Event ENTRY_MODIFY has happened,which fileName is 新建文本文档.txt
Event ENTRY_CREATE has happened,which fileName is 新建文件夹 (2)
Event ENTRY_DELETE has happened,which fileName is 新建文本文档 (2).txt
Event ENTRY_CREATE has happened,which fileName is 新建文本搜索文档 (2).txt
Event ENTRY_MODIFY has happened,which fileName is 新建文本搜索文档 (2).txt
*/
/*更名会被认为是删除->新建->修改内容*/