Java NIO2包WatchService解析与运用

背景

我们在用IDE写代码,或者某些文本编辑器的时候,在外部如果修改了这个文件,通常这些编辑器都能感知到,有些还会提示你是否要重新加载,例如notepad++:
Java NIO2包WatchService解析与运用_第1张图片

这些特性都是基于文件系统的文件变化通知实现的。我们可以通过一些方式监控某些文件或者文件夹的变化,但是很难做到Scalable

Java7之后的NIO2包的WatchService提供了一种Scalable的方式监控文件与文件夹变化

代码解析

public class WatchServiceFirst {
    public static void main(String[] args) throws IOException, InterruptedException {

        WatchService watchService = FileSystems.getDefault().newWatchService();
        Path path = Paths.get("D:\\apache-jmeter-3.3\\bin");

        //注册需要监听的事件
        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW);

        WatchKey key;
        while ((key = watchService.take()) != null) {
            for (WatchEvent event : key.pollEvents()) {
                System.out.println(
                        "Event kind:" + event.kind()
                                + ". File affected: " + event.context() + ".");
            }
            key.reset();
        }
    }
}

四种监听事件:

StandardWatchEventKinds.ENTRY_CREATE 文件创建
StandardWatchEventKinds.ENTRY_DELETE 文件删除
StandardWatchEventKinds.ENTRY_MODIFY 文件修改
StandardWatchEventKinds.OVERFLOW 事件丢失,一般不关注

这里的event.context()是相对路径并且,只能监控当前目录下的,也就是说你在其中一个子目录下创建文件或者文件夹,都是只会返回这个目录的修改事件。

你可能感兴趣的:(java碎片收集)