如何在Linux中实时监控目录的变化?
java7中新增的nio.2
watchService有监听目录、文件修改、增加删除之类的功能
public class WatchServiceTest
{
public static void main(String[] args)
throws Exception
{
/** 获取文件系统的WatchService对象
* 以前的java版本中,如果程序需要监控文件变化,需要启动一条后台线程
* 该线程每隔一段时间,去“遍历”一次指定目录的文件,如果发现此次遍历的结果与上次遍历结果不同,
* 则认为了文件发生了变化,但这种方式十分繁琐,并且性能也不好
*/
WatchService watchService = FileSystems.getDefault()
.newWatchService();
// 为/根路径注册监听
Paths.get("/").register(watchService
, StandardWatchEventKinds.ENTRY_CREATE
, StandardWatchEventKinds.ENTRY_MODIFY
, StandardWatchEventKinds.ENTRY_DELETE);
while(true)
{
/** 获取下一个文件改动事件
* poll获取下一个wachKey,如果没有wachKey发生就返回null
* poll(long timeout, TimeOut unit) 尝试等待timeout时间去获取下一个wachKey
* take如果没有wachKey发生,就一直等待 如果程序需要一直监控,就用take
* 如果是指定时间监控,就用poll
*/
WatchKey key = watchService.take();
for (WatchEvent> event : key.pollEvents())
{//可以增加个Date
System.out.println(event.context() +" 文件发生了 "
+ event.kind()+ "事件!");
}
// 重设WatchKey
boolean valid = key.reset();
// 如果重设失败,退出监听
if (!valid) {
break;
}
}
}
}