繁体   English   中英

使用 Java 的操作系统事件处理程序

[英]Operating System event handler using Java

我有一个 java 进程,它作为守护进程工作,它监视文件系统上的一个目录,一旦将新文件添加到目录中,java 进程将通过对它执行一些逻辑来处理这个文件,目前在我实现守护进程检查每 10 秒创建一次文件夹,如果添加了新文件,它将开始处理它。

有没有办法让文件夹通知进程添加了新文件,然后进程可以开始处理它,文件夹上的事件处理程序类型是 java API 的操作系统级别,我可以这样做吗在 java 中?

我没有办法知道。 无论如何,对于通知某些内容的文件夹,您可能必须更改(创建自己的)文件系统驱动程序。

系统事件非常依赖于操作系统,而 Java 则相反。

这取决于您希望守护程序响应的速度。 使用 sleep 方法可以缩短睡眠时间,但会占用更多的 CPU 周期。

现在您可以使用现有的实用程序,例如jfilenotify ,但它是Java 7中的新功能之一。

您应该设计您的代码,使通知机制与您的处理程序分离,从而使您可以轻松升级。

我认为您会遇到的一个问题是对同一个文件的并发访问。 如果它仍在被写入,那么您将无法获得对该文件的独占访问权限.. 并且没有任何证据表明该文件甚至还有任何数据。 您可能(ab)使用该事实来查看文件是否实际上已完成。

尝试对该文件进行独占锁定,如果失败,则表示该文件尚未完成写入。 一旦它具有排他锁,那么文件很可能已经完成,您可以随意处理它。

查看 java.nio.channels.FileLock 看看是否适合您。 http://download.oracle.com/javase/6/docs/api/java/nio/channels/FileLock.html

如果您使用的是 Java 7,请尝试阅读内容。 有一个 WatchService class 可以处理你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM