我有一个java进程作为守护进程,它监视文件系统上的directroy,一旦newy文件被添加到java进程将通过执行一些逻辑处理该文件的目录,目前在我的实现中守护进程每隔10秒检查一次文件夹,如果添加了新文件,它将开始处理它。
有没有办法让文件夹通知进程添加了新文件,然后进程可以开始处理它,它自己的文件夹上的事件处理程序类型是java API的OS级别,可以我在java中这样做?
答案 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类可以处理你想要的东西。