第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

java如何寫(xiě)一個(gè)高效率的及時(shí)獲取更新文件改動(dòng)的方式

標(biāo)簽:
Java
场景

      在很多要多次读取配置文件的场所中,想要让修改文件后,尽快的读取到新的配置。

常用的解决方式

        常见的解决方式一般是使用轮训的方式。就是开启一个线程定时的去轮训配置文件的最后修改时间,如果修改时间和上次不同,就重新读取配置文件的内容。

        以上的方法比较浪费资源,因为你的cpu要不停的去轮转判断,而且固定的时间间隔太长的话会造成信息修改不及时的问题。

新特性描述

      在java7中加入了一个新功能,目录监控,解决了上面描述的问题。这个版本提供了一个WatchService。这个类的作用就是可以去注册文件夹和相应的事件。常见的事件就是创建,删除和改变。当发生相应事件的时候,就可以去获取到发生事件的文件或者文件夹,从而达到了及时获取到变化。这样就带来一个好处,想关注配置文件的变化的时候,就在文件所在的文件夹上注册相应的事件,一般就是注册改变事件。

 编写方式

         所有的文件注入都是相似的。所有这个编程就是一个规范化的东西。

         首先获取到WatchService对象


WatchService watcher = FileSystems.getDefault().newWatchService();

        我们监控的是文件夹,所有现在文件系统的WatchService

        然后我们需要获取到想注册事件的文件夹dir,是一个Path类型,然后在service上注册事件,这里我们注册一个改变事件就行。

dir.register(watcher, ENTRY_MODIFY);

        然后就是通过事件的监听来获取改变的情况,WatchService可以通过take或者poll方法来轮训,take是阻塞的,poll是非阻塞的,这个根据具体场景来选择,下面选择take,这样可以省去一部分cpu的消耗。

WatchKey key = watcher.take();

        通过这个方法可以获取一个watchkey,他的pollEvents方法就会返回所有的有相应的事件。我们选择使用for循环去遍历。

for (WatchEvent<?> event : key.pollEvents())

        也可以根据这个key来获取到监控的目录

Path dir = (Path) key.watchable();

        根据event强制转化为一个Path,可以根据context方法获取一个路径。

        然后根据path的方法,就可以获取到改变文件的全路径了。

Path child = dir.resolve(name);
编写方式优化

        由于上面的编码其实是比较有规范的,我就把这些功能直接抽象包装一下。并且分享出来

        https://git.oschina.net/xpbob/commonIO.git

        如何还需要上面的模式,就精简到下面的几行代码

        final DirWatcher dw = new DirWatcher(true);
        dw.registerAllEvents(Paths.get("c:/hello")).addHandler(new WatcherResultHandler() {

            public void handleResult(Path path, Kind<?> event) {
                System.out.println(path.toString() + ": " + event.toString());
            }
        }).processEvents();

        精简后,我们只要输入监控的目录,然后实现一个WatcherResultHandler借口,完成一个回调。

        handleResult(Path path, Kind<?> event) 这里的第一个参数就是文件,第二个参数就是相应的事件,通过上面的操作,我们就能只关心我们的业务流程,而不用写很繁琐的操作了。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
1.6萬(wàn)
獲贊與收藏
380

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消