文件目录的增删改操作?java如何实时监控?

前言有时候你可能有个疑问,IDE总是可以检测到外部文件是否发生了变化,比如你在某个类里面加了一些代码,这时候的IDE就会弹出一个框说你做了更改 。再或者是某个文件夹下的文件发生了改变,比如新建了一个或者是删除了一个等等 。这时候我们的IDE依然可以检测到 。这个功能到底是如何实现的呢?这篇文章主要是研究NIO的其中一个类,叫做WatchService 。

也有一些其他的方式可以轻松地实现监控文件夹的功能,比如说JAVA轮询的方式,或者是common-io的方式,我会慢慢比较 。
OK,我们直接来看一下简单例子如何实现,再去分析如何实现的?
一、代码实现1、简单案例这个代码很简单,只需要四步:
public static void main(String[] args) throws Exception {   //第一步:取得WatchService   WatchService watchService = FileSystems.getDefault().newWatchService();   //第二步:确定要监控的路径   Path path = Paths.get("G:\");   //第三步:为本路径绑定WatchService,并确定监控的事件   path.register(       watchService,       StandardWatchEventKinds.ENTRY_CREATE,       StandardWatchEventKinds.ENTRY_DELETE,       StandardWatchEventKinds.ENTRY_MODIFY);   WatchKey key;   //第四步:当有事件时,开始触发   while ((key = watchService.take()) != null) {       for (WatchEvent<?> event : key.pollEvents()) {          System.out.println("事件" + event.kind() + "发生了,文件是:" + event.context());       }       key.reset();   }}这里我们监控G盘,然后我们在G盘新建文件,然后删除修改,就会在后台打印相关信息 。
文件目录的增删改操作?java如何实时监控?

文章插图
 
现在就可以监控了,很简单 。
2、代码分析第一步和第二步,新建一个取得WatchService和取得要监控的路径,这个很容易理解 。
第三步绑定,这里只需要注意两件重要的事情:首先,path将watchService作为第一个参数,然后是StandardWatchEventKinds的变量参数 。一共有四种 。