2011-07-07 41 views
3

我有一个java进程作为守护进程工作,它监视文件系统上的directroy,一旦newy文件被添加到目录中,java进程将通过执行一些逻辑来处理这个文件它目前在我的实现守护进程每10秒检查一次文件夹,并在新文件被添加的情况下,它将开始处理它。使用Java的操作系统事件处理程序

有没有办法让文件夹通知进程添加新文件,然后进程就可以开始工作了,类文件夹上的事件处理程序自身就是java API的操作系统级别,我可以在java中执行此操作吗?

回答

2

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

系统事件非常依赖于操作系统,而Java被设计为相反。

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

1

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

+0

非常感谢您的快速回复。 – David

+0

不客气=) – wleao

2

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

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

2

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

尝试获取该文件的排他锁,如果失败,则表示该文件没有写入。一旦它拥有独占锁定,那么该文件很可能已经完成,并且您可以随意处理它。

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

+0

+1有用的信息。在当前Java可用的所有文件观察器实现中,存在并发访问问题。 – Perception