使用path监听指定文件系统的变化
Posted 思余生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用path监听指定文件系统的变化相关的知识,希望对你有一定的参考价值。
在以前的JAVA版本中,如果程序需要检测文件的变化,那么需要开辟一个线程每隔一段时间去遍历一次指定的目录,如果发现此次遍历结果和上次不同,那么就认为文件变动了
,这样的方式非常繁琐,JAVA 7之后的NIO.2 Path类提供了一个方法来监听指定文件目录内文件的变化状态。
1、获取文件系统的WatchService对
2、使用Path类的方法去注册一个监听,指定监听文件的哪些状态,如新增、修改、删除。
package com.nio2;
import java.io.IOException;
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 ListenTest {
public static void main(String[] args) {
// 获取到一个path对象
Path path = Paths.get("C:\\\\Users\\\\Administrator\\\\Desktop\\\\新建文件夹");
// 获取文件系统的WatchService
WatchService watchService;
try {
watchService = FileSystems.getDefault().newWatchService();
// 注册一个文件监听服务,监听文件系统的增加、修改、删除
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
while (true) {
// 获取下一个文件变化事件
WatchKey watchKey = watchService.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
System.out.println("文件" + event.context() + "发生了" + event.kind());
}
// 重新设置WatchKey
boolean flag = watchKey.reset();
// 如果重设失败,就退出
if (!flag) {
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上是关于使用path监听指定文件系统的变化的主要内容,如果未能解决你的问题,请参考以下文章