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

时间:2011-07-07 19:59:24

标签: java operating-system

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

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

4 个答案:

答案 0 :(得分:2)

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

系统事件非常依赖于操作系统,Java的设计恰恰相反。

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

答案 1 :(得分:2)

现在,您可以使用jfilenotify等现有实用程序,但它将成为Java 7中的新功能之一。

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

答案 2 :(得分:2)

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

尝试获取该文件的独占锁定,如果失败,则表示该文件未写入。一旦它有一个独占锁,那么文件可能就完成了,你可以随意处理它。

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

答案 3 :(得分:1)

如果您使用的是Java 7,请尝试阅读this。 有一个WatchService类可以处理你想要的东西。