Java:检测对文件的修改(文件轮询?)

Java:检测对文件的修改(文件轮询?),java,file,detection,polling,last-modified,Java,File,Detection,Polling,Last Modified,在Java中,检测文件修改的最有效方法是什么 我读过关于文件轮询的内容,但是,轮询方法有许多缺点,随着被监视文件数量的增加,这些缺点变得越来越明显。我宁愿不使用轮询,但许多在线解决方案似乎将文件轮询作为推荐的方法。我希望可能会有一个与操作系统相关的文件系统更新回调解决方案——这在linux和windows中都可能吗 鉴于我目前只打算“监视”2个文件,我仍然对文件轮询解决方案持开放态度。理想情况下,我希望文件轮询不会对性能产生很大影响 我知道Java7的WatchService,但由于Java7尚

在Java中,检测文件修改的最有效方法是什么

我读过关于文件轮询的内容,但是,轮询方法有许多缺点,随着被监视文件数量的增加,这些缺点变得越来越明显。我宁愿不使用轮询,但许多在线解决方案似乎将文件轮询作为推荐的方法。我希望可能会有一个与操作系统相关的文件系统更新回调解决方案——这在linux和windows中都可能吗

鉴于我目前只打算“监视”2个文件,我仍然对文件轮询解决方案持开放态度。理想情况下,我希望文件轮询不会对性能产生很大影响

我知道Java7的WatchService,但由于Java7尚未正式发布,所以我对使用这种方法或JNI库犹豫不决

非常感谢


编辑:看来文件轮询是一种方法。如果有人能推荐实现文件轮询的最安全/高效的方法,那就太好了。

没有Java解决方案可以让操作系统在文件更改时通知您。这可能是通过本机调用实现的,但是每个操作系统在这方面都是不同的,Java当然不支持它。如果可能的话,它将需要使用JNI进行大量定制编码


使用轮询解决方案,只要您对修改的日期进行轮询,就会非常快。只是要确保不要让文件的引用长时间打开。始终在轮询周期之间关闭它们,以确保不会产生冲突。

以下是两个可用的库:


可能还有一些东西可以提供给您(我不知道目前是否在Java 7的范围内),请参见

True。我读到的所有与操作系统相关的文件系统更新回调解决方案都指向JNI,我也反对使用JNI。我想是吧!:)现在,我想找到最好的解决办法。就我个人而言,我只想写一些简短、简单的东西,并且达到我所需要的程度。如果jpoller工作,我不会感到惊讶,这是@Brent建议的。jnotify看起来需要安装额外的库,我不喜欢需要这些库的Java解决方案。“一定不要让文件的引用长时间打开。”在轮询周期之间关闭它们以避免冲突是什么意思?我一直在考虑让我的文件轮询始终处于活动状态,因为不知道用户何时可能想要更改文件,因此侦听器必须随时准备检测此类活动。如果始终有一个实例处于打开状态,轮询周期何时会发生冲突?谢谢!:)在每个轮询周期中,您应该确保在完成轮询时关闭所有打开的文件句柄。因此,如果您出于任何原因打开一个文件,您必须将其关闭。在下一个轮询周期之前,不要将其打开30秒。(或者不管它有多长)哦,我明白了,关闭在每个轮询间隔期间打开的每个文件,不管间隔有多短。我每秒轮询一次,以检查文件的上次修改时间。到目前为止,它似乎正在发挥作用。希望在我进行的过程中没有性能问题。谢谢你的帮助!你打算用它干什么?Filetransfer?我计划使用log4j构建一个记录器。所以我想要一种方法来监视对log4j配置文件的任何更改,以便重新加载它。重复问题。