开发者社区> 问答> 正文

java 文件夹监控jnotify多次监听Modified - java报错

"

在使用java做文件夹监听时遇到了一个问题,就是在监听到一个文件更改时会扫行4次Modified方法,这样我在Modified这个方面里做的文件解析操作也同样执行4次,因为我要监控的文件在10个左右,它每个文件都要执行4次,这样太废资源和时间了啊,有没有什么好的办法监听每个文件的改动只执行一次Modified方法????

谢谢!

"

展开
收起
montos 2020-06-04 13:19:15 1222 0
1 条回答
写回答
取消 提交回答
  • "

    不是会自动通知你的回调吗?

    http://jnotify.sourceforge.net/sample.html

    ######<div class=""ref"">

    引用来自“ZYud”的答案

    不是会自动通知你的回调吗?

    http://jnotify.sourceforge.net/sample.html

    是执行回调了啊,但是一个文件执行了多次回调啊,这样我在回调里写的解析操作要执行多次啊,我想让回调就执行一次啊?????
    ######

    jnotify bug很多 我也遇到过,还有rename的问题

    我现在改用了jpathwatch,稍微好点

    总的来说java的watch service没一个好用的,连jdk7的我也测试了

    我觉得这也和linux文件系统设计有缺陷有关

    ######

    引用来自“浪客Dandy”的答案

    jnotify bug很多 我也遇到过,还有rename的问题

    我现在改用了jpathwatch,稍微好点

    总的来说java的watch service没一个好用的,连jdk7的我也测试了

    我觉得这也和linux文件系统设计有缺陷有关

    jpathwatch我也试过一样,监控一个文件的修改也是执行三四次回调,你是怎么解决这个问题的啊

    jpathwatch和jnotify都是基于事件驱动的啊,jdk7还没试过。我也试过线程轮寻,不过那个太费资源了啊,如果文件改动比较频繁的话,系统吃不消啊,没办法啊

    你用jpathwatch怎么解决执行三四次回调问题的啊

    ######

    引用来自“hld_hepeng”的答案

    引用来自“ZYud”的答案

    不是会自动通知你的回调吗?

    http://jnotify.sourceforge.net/sample.html

    是执行回调了啊,但是一个文件执行了多次回调啊,这样我在回调里写的解析操作要执行多次啊,我想让回调就执行一次啊?????

    open有多个还是什么?

    不行你就监控close_write就可以了吗.

    请多程序都会这样操作.多次打开文件.不一定是系统的问题.

    ######

    引用来自“ZYud”的答案

    引用来自“hld_hepeng”的答案

    引用来自“ZYud”的答案

    不是会自动通知你的回调吗?

    http://jnotify.sourceforge.net/sample.html

    是执行回调了啊,但是一个文件执行了多次回调啊,这样我在回调里写的解析操作要执行多次啊,我想让回调就执行一次啊?????

    open有多个还是什么?

    不行你就监控close_write就可以了吗.

    请多程序都会这样操作.多次打开文件.不一定是系统的问题.

    我监控的是修改事件啊,好像没有close_write的吧

    只有四个回调方法fileRenamed,fileModified,fileDeleted,fileCreated

    fileCreated和fileDeleted回调时是只执行一次的,但如果一个文件有更改的话会执行多次fileModified回调,我想让这个回调只执行一次????

    ######

    坦白的说我还没找到完美的解决方法,我现在在尝试调用inotifywait

    然后解析命令行输出最为结果,还在尝试阶段

    ######

    引用来自“浪客Dandy”的答案

    坦白的说我还没找到完美的解决方法,我现在在尝试调用inotifywait

    然后解析命令行输出最为结果,还在尝试阶段

    那可怎么办啊,这个问题也困扰我很久了啊,怎么办呢??

    ######

    只能做个延时处理.或者换种思路.你如果想当文件修改完成时做一些操作的话,不妨有close_write

    ######

    java的inotify封装就没有带close write的,这主要是因为他们都想统一win mac linux的开发接口

    我觉得至少对于linux而言 必须单独做 所以我在尝试inotify tools

    说实话 在这方面windows api要强太多了

    "
    2020-06-04 13:31:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载