final Path path = Paths.get(".");
final WatchService watchService = path.getFileSystem().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("Report any file changed within next 1 minutes...");
注册了需要监视的目录后,需要使用WatchKey来得到一段时间内的,该目录的变化情况:
final WatchKey watchKey = watchService.poll(1, TimeUnit.MINUTES);
if(watchKey != null) {
watchKey.pollEvents().stream().forEach(event ->
System.out.println(event.context()));
这里使用了Java 8中的内部遍历器forEach来完成对于事件的遍历。这也算是一个Java 7和Java 8特性的联合使用吧。
列举目录中的所有文件首先给出代码:Files.list(Paths.get(".")).forEach(System.out::println);Files.list方法得到的是一个Stream类型的对象,它代表了目标路径下所有的文件。如果只想获取目标路径下的所有目录文件:Files.list(Paths.get(".")) .filter(Files
在研究规则引擎时,如果规则以文件的形式存储,那么就需要监听指定的目录或文件来感知规则是否变化,进而进行加载。当然,在其他业务场景下,比如想实现配置文件的动态加载、日志文件的监听、FTP文件变动监听等都会遇到类似的场景。
本文给大家提供三种解决方案,并分析其中的利弊,建议收藏,以备不时之需。
方案一:定时任务 + File#lastModified
这个方案是最简单,最能直接想到的解决方案。通过定时任务,轮训查询文件的最后修改时间,与上一次进行对比。如果发生变化,则说明文件已经修改,进行重新加载或对应的
下面的四个方法都可以删除文件或文件夹,它们的共同点是:当文件夹中包含子文件的时候都会删除失败,也就是说这四个方法只能删除空文件夹。它们之间的差异:
归根结底,建议大家使用 java NIO 的和进行文件或文件夹的删除。上文已经说了,那四个 API 删除文件夹的时候,如果文件夹包含子文件,就会删除失败。那么,如果我们确实想删除整个文件夹,该怎么办?为了方便我们后面进行试验,先去创建这样一个目录结构,“.log” 结尾的是数据文件,其他的是文件夹可以使用代面的代码进行创建
2.1. walkFileTree 与
二、Java监听目录变化的实现方式
https://zq99299.github.io/java-tutorial/essential/io/notification.html#watch-%E6%9C%8D%E5%8A%A1%E6%A6%82%E8%BF%B0
三、注意事项
1、监听的事件发生时,java应用程序不会实时感知到,而是有一定的间隔。监听程序默认10s检测一次。
Pollin