首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏java 成神之路

    JAVA 文件监控 WatchService

    概述 java1.7中 提供了WatchService来监控系统中文件的变化。 而以上两种场景就比较适合使用 WatchService 进行文件监控。 watchService = FileSystems.getDefault().newWatchService(); String filePath = "D:/aa"; , StandardWatchEventKinds.ENTRY_DELETE); while(true){ WatchKey key = watchService.take 不使用 WatchService 监控的弊端 非常繁琐,必须自己手动开启一个后台线程每隔一段时间遍历一次目标节点并记录当前状态,然后和上一次遍历的状态对比,如果不相同就表示发生了变化,再采取相应的操作,

    3.2K121发布于 2018-05-18
  • 来自专栏Linyb极客之路

    文件监听之WatchService浅析

    简介 WatchService是jdk7之后nio包中的新功能。可以看作是文件监控器,通过操作系统原生文件系统来运行。 针对单点多appkey的情况,可以注册开启多个监控器。 应用场景 1、感知系统配置文件的变化,修改配置文件内容即时生效,无需重启服务器 2、监控磁盘中的文件变化 用watchservice修改配置文件方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的 动态修改配置即时生效实现方法 1、WatchService 实例化 watchService = FileSystems.getDefault().newWatchService(); 2、使用 Path watchService; public WatcherHookThead(WatchService watchService) { super(); this.watchService = watchService; } @Override public void run() { try { watchService.close

    2.3K20发布于 2018-07-26
  • 来自专栏程序那些事

    小师妹学JavaIO之:文件系统和WatchService

    WatchService和文件系统 WatchService是JDK7在nio中引入的接口: ? 监控的服务叫做WatchService,被监控的对象叫做Watchable: WatchKey register(WatchService watcher, 上次文章中说的文件系统,小师妹还记得吧,FileSystem中就有一个获取WatchService的方法: public abstract WatchService newWatchService() 有了文件系统,我们就可以在获取系统默认的文件系统的同时,获取到相应的WatchServiceWatchService watchService = FileSystems.getDefault() 其实…..WatchService就是这样做的!

    93630发布于 2020-07-07
  • 来自专栏测试学习之路

    ui自动化利用WatchService去给下载事件进行断言

    此时我们可以通过WatchService去监听目录文件,来确定文件是否下载成功。 Path downloadFolderPath = Paths.get(filepath); WatchService watchService = FileSystems.getDefault().newWatchService(); downloadFolderPath.register (watchService, StandardWatchEventKinds.ENTRY_CREATE); long startTime = System.currentTimeMillis do { WatchKey watchKey; watchKey = watchService.poll

    70710发布于 2021-03-15
  • 来自专栏Howl同学的学习笔记

    监听文件修改的四种方法

    WatchService WatchService 是利用本机操作系统的文件系统来实现监控文件目录(监控目录),于 JDK1.7 引入的位于 NIO 包下的新机制,所以使用方式和 NIO 也很相似 JDK 自带的 watchService 的缺点是修改文件会触发两次事件,因操作系统有不同情况: 修改了文件的 meta 信息和日期 写时复制效果,即旧文件改名,并将内容复制到新建的文件里 watchService (watchService, StandardWatchEventKinds.ENTRY_MODIFY); // 监听 while (true) { // 获取监听到的事件 key WatchKey watchKey = watchService.poll(3 * 1000, TimeUnit.MILLISECONDS); Hutool(推荐) Hutool 是国人维护的工具集,使用别人的轮子,总比自己重复造轮子高效(但也要了解轮子的设计思路),hutool 底层还是使用 WatchService ,其解决了修改文件会触发两次事件

    1.2K10编辑于 2022-05-09
  • 来自专栏码农那些事!!!

    太极限了,JDK的这个BUG都能被我踩到!

    这也能被我们碰到,真是有点极限~ WatchService—JDK内置的文件变更监听 当了解到之前的实现存在BUG后,我就去搜了一下Java下如何监听文件变更,果然被我找到了WatchService。 说是WatchService可以监听一个目录,对目录下的文件新增、变更、删除进行监听。 watchService = FileSystems.getDefault().newWatchService()) { path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE 源码 >>> 1652076266609 - 1652076257097 9512 WatchService原理 WatchService watchService = FileSystems.getDefault 可能你要问了,为什么不用WatchService呢? 我也问了负责人,据说inotify在docker上运行的不是很好,经常会丢失事件,不是Java的问题,所有语言都存在这个问题,所以一直没有使用。

    41810编辑于 2023-05-01
  • 来自专栏捉虫大师

    太极限了,JDK的这个BUG都能被我踩到

    这也能被我们碰到,真是有点极限~ WatchService—JDK内置的文件变更监听 当了解到之前的实现存在BUG后,我就去搜了一下Java下如何监听文件变更,果然被我找到了WatchService。 [p5.png] 说是WatchService可以监听一个目录,对目录下的文件新增、变更、删除进行监听。 watchService = FileSystems.getDefault().newWatchService()) { path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE 源码 >>> 1652076266609 - 1652076257097 9512 WatchService原理 WatchService watchService = FileSystems.getDefault 可能你要问了,为什么不用WatchService呢? 我也问了负责人,据说inotify在docker上运行的不是很好,经常会丢失事件,不是Java的问题,所有语言都存在这个问题,所以一直没有使用。

    63641编辑于 2022-05-10
  • 来自专栏小工匠聊架构

    并发编程 - 利用Event Bus模式实现目录文件变化捕捉

    Pre 并发编程 - Event Bus 设计模式 ---- 需求 JDK自1.7版本后提供了WatchService类,该类可以基于事件通知的方式监控文件或者目录的任何变化,文件的改变相当于每一个事件 (Event)的发生,针对不同的时间执行不同的动作,我们将结合NIO2.0中提供的WatchService和上一篇博文实现的Event Bus实现文件目录的监控的功能。 : show me the code , change the world */ @Slf4j public class DirectoryTargetMonitor { private WatchService watchService; private final EventBus eventBus; private final Path path; private volatile \n", path); } } 在创建WatchService之后将文件的修改、删除、创建等注册给了WatchService,在指定目录下发生诸如此类的事件之后便会收到通知,将事件类型和发生变化的文件

    35920编辑于 2023-07-11
  • 来自专栏jeremy的技术点滴

    Java监听目录文件变更

    Java 7中提供了java.nio.file.WatchService用来监听文件系统目录变更,用起来还是比较简单的,在这里记录一下。 创建一个WatchService 代码如下: 1 WatchService watcher = FileSystems.getDefault().newWatchService(); 当然一个WatchService 是关联着操作系统资源的,需要完全的关闭,所以一般像下面这样写: WatchService watcher = null; try { watcher = FileSystems.getDefault valid) { break; } } WatchKey被cancel或WatchService被close时,key.reset()会返回false, 此时应该跳出循环。 { return (WatchEvent<T>)event; } /** * Register the given directory with the WatchService

    4.9K70发布于 2018-05-10
  • 来自专栏小工匠聊架构

    Java Review - 使用Event Bus实现目录变化的监控

    有问题啊 , 比如在采集时间间隔内,文件发生了N次变化,只能获取到最后一次,其根本原因是文件的变化不会通知到应用程序, 我只能傻傻的轮询~ 新思路: JDK自1.7版本后提供了WatchService类 ,该类可以基于事件通知的方式监控文件或者目录的任何变化,文件的改变相当于每一个事件(Event)的发生,针对不同的时间执行不同的动作,结合NIO2.0中提供的WatchService和Event Bus watchService; private final EventBus eventBus; private final Path path; private volatile = FileSystems.getDefault().newWatchService(); //为路径注册感兴趣的事件 this.path.register(watchService \n", path); } } 在创建WatchService之后将文件的修改、删除、创建等注册给了WatchService,在指定目录下发生诸如此类的事件之后便会收到通知,我们将事件类型和发生变化的文件

    74110编辑于 2022-01-12
  • 来自专栏古时的风筝

    Java 项目中一种简单的动态修改配置即时生效的方式 WatchService

    WatchService 方式 Java 提供了 WatchService 接口,这个接口是利用操作系统本身的文件监控器对目录和文件进行监控,当被监控对象发生变化时,会有信号通知,从而可以高效的发现变化 这种方式大致的原理:先根据操作系统 new 一个监控器( WatchService ),然后选择要监控的配置文件所在目录或文件,然后订阅要监控的事件,例如创建、删除、编辑,最后向被监控位置注册这个监控器 private static final Logger logger = LoggerFactory.getLogger(ConfigWatcher.class); private static WatchService watchService; @PostConstruct public void init() { logger.info("启动配置文件监控器"); } } } } 代码非常简单,一看就懂,在项目启动的时候,用 FileSystems.getDefault().newWatchService() 创建一个 WatchService

    2.7K50发布于 2018-07-05
  • 来自专栏丑胖侠

    Java实现监听文件变化的三种方法,推荐第三种

    方案二:WatchService 在Java 7中新增了java.nio.file.WatchService,通过它可以实现文件变动的监听。 WatchService是基于操作系统的文件系统监控器,可以监控系统所有文件的变化,无需遍历、无需比较,是一种基于信号收发的监控,效率高。 ,它是对操作系统的文件监视器的封装,相对之前,不需要遍历文件目录,效率要高很多 WatchService watcher = FileSystems.getDefault().newWatchService 一个特殊的Event,表示Event被放弃或者丢失 如果查看WatchService实现类(PollingWatchService)的源码,会发现,本质上就是开启了一个独立的线程来监控文件的变化: 如果你编写一个demo,进行验证时,会很明显的感觉到WatchService监控文件的变化并不是实时的,有时候要等几秒才监听到文件的变化。

    8.9K42编辑于 2022-05-31
  • 来自专栏IT笔记

    聊一聊生产环境中如何动态监听配置文件变化并重载

    static void setProperty(String key, String value) { getProps().setProperty(key, value); } } WatchService java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService static ExecutorService fixedThreadPool = Executors .newFixedThreadPool(5); private WatchService ResourceListener.addListener("E:/test"); } } class Listner implements Runnable { private WatchService service; private String rootPath; public Listner(WatchService service, String rootPath) {

    2.5K110发布于 2018-04-13
  • Java 文件操作全指南:读写、复制、压缩与实战应用

    Files.delete(Paths.get(logFile)); // 删除原始日志 }} 示例用途:Web 应用每日归档日志 + 删除旧文件十、文件监听(自动检测文件变化)使用 WatchService 监听文件夹变化:java复制编辑WatchService watchService = FileSystems.getDefault().newWatchService();Path path = Paths.get ("watched_folder");path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE , StandardWatchEventKinds.ENTRY_MODIFY);WatchKey key;while ((key = watchService.take()) ! );}十一、总结功能对应类/方法基础检查File、Files.exists文本读写Files.lines / write目录遍历Files.walk()压缩解压ZipInputStream 等文件监控WatchService

    57000编辑于 2025-06-10
  • 来自专栏小二十七

    优雅的操作文件:java.nio.file 库介绍

    java.nio.file 中常用的类和模块,大致如下: Path 路径:Paths 模块和 Path 工具类介绍 Files 文件:File 和 FileSystems 工具类介绍 文件管理服务:WatchService sun.nio.fs.WindowsFileSystemProvider@5b480cf9 FileSystem 工具类的方法并不多,可以参考它的 API,但通过 FileSystem 可以创建 WatchService 和 PathMatcher 子类 WatchService 文件监控 WatchService 是一个文件系统观察者,基于 FileSystem 创建,主要用于监控文件系统事件(如创建、修改、删除文件或目录 WatchService watchService = FileSystems.getDefault().newWatchService(); // 注册监听指定的目录 key.reset()) { break; } } watchService.close(); } }

    99110编辑于 2023-08-28
  • 来自专栏杨飞@益术

    笔者带你剖析Java7.x新特性

    如果在程序中需要使用Java7.x的文件监测功能,那么我们务必需要了解java.nio.file包下的WatchService接口。 WatchService接口不仅作为监测服务,还管理着具体的监控细节。 获取WatchService接口实例: Java代码 WatchService watchService = FileSystems.getDefault()           .newWatchService ();   WatchService watchService = FileSystems.getDefault() .newWatchService(); 文件监测是基于事件驱动的 首先我们需要定义好目标监控路径,然后调用FileSystems类型的newWatchService()方法创建WatchService对象。

    65010发布于 2019-02-22
  • 【详解】JavaU盘检测程序&文件递归

    Java 7 引入了 ​​WatchService​​ API,可以用来监控文件系统的变化。2. 文件递归遍历接下来,我们需要一个方法来递归地遍历U盘中的所有文件和目录。 public class USBDriveMonitor { public static void main(String[] args) { try { // 创建WatchService 实例 WatchService watchService = FileSystems.getDefault().newWatchService(); // 注册根目录以监视 U盘的插入和移除 Path rootPath = Paths.get("/"); rootPath.register(watchService, ENTRY_CREATE Directory: " + dir); return FileVisitResult.CONTINUE; } }); }}代码说明WatchService

    24310编辑于 2025-12-02
  • 来自专栏全栈程序员必看

    Java7 新特性 —— java.nio.file 文件操作

    可以设置一个进程对目录中的更改做出响应,一个 WatchService 对象可以通过 FileSystem 生成 在下面这个例子中,delTxtFiles() 作为一个单独的任务执行,该任务将遍历整个目录并删除以 .txt 结尾的所有文件,WatchService 会对文件的删除做出反应: Path test = Paths.get("test"); // 要监视的文件 Files.createFile(test.resolve ("Hello.txt")); // 生成WatchService对象 WatchService watcher = FileSystems.getDefault().newWatchService() 只会监视给定的目录,并不包含其下的所有子目录,所有本例中如果 test 下的子目录还有其他 .txt 结尾的文件,并不会触发 WatchService。 要想监视整个子目录,必须在每个子目录放置一个 WatchService 文件查找与读写 我们可以通过在 FileSystem 对象上调用 getPathMatcher() 获得一个 PathMatcher

    1.7K30发布于 2021-04-07
  • 来自专栏分布式|微服务|性能优化|并发编程|源码分析

    SpringBoot 整合websocket|实现日志实时查看

    import org.springframework.stereotype.Component; import javax.websocket.Session; import java.nio.file.WatchService startListenLogFileAndSendWebsocket(Session session, String filePath, String fileName, Map<Session, WatchService * @throws IOException * @throws InterruptedException */ public static void watcherLog(WatchService watchService, String filePath, String fileName, Consumer<String> consumer, FileListenerStopCallback configFile = Paths.get(filePath + File.separator + fileName).toFile(); Paths.get(filePath).register(watchService

    3.6K30编辑于 2022-09-19
  • 来自专栏Java Web

    这都Java15了,Java7特性还没整明白?

    3 - WatchService Java 7 还为开发人员提供了一套全新的文件系统功能,那就是文件监测。 开发人员可以使用java.nio.file包下的StandardWatchEventKinds类型提供的3种字面常量来定义监测事件类型,值得注意的是监测事件需要和WatchService实例一起进行注册 (watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, 首先我们需要定义好目标监控路径,然后调用FileSystems类型的newWatchService()方法创建WatchService对象。 接下来我们还需使用Path接口的register()方法注册WatchService实例及监控事件。当这些基础作业层全部准备好后,我们再编写外围实时监测循环。

    98810发布于 2020-08-20
领券