【问题标题】:Operating System event handler using Java使用 Java 的操作系统事件处理程序
【发布时间】:2011-09-30 18:39:47
【问题描述】:

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

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

【问题讨论】:

    标签: java operating-system


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      尝试获取该文件的排他锁,如果失败,则表示该文件未完成写入。一旦它有了排他锁,那么文件很可能已经完成,你可以随意处理它。

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

      【讨论】:

      • +1 获取有用信息。在 Java 当前可用的所有文件观察器实现中,都存在并发访问问题。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 非常感谢您的快速回复。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 2018-09-22
        • 2015-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多