2010-04-27 41 views
3

我有一个应用程序,我需要检查可能在我的执行过程中动态创建的文件,在文件尚未显示的MAX时间后,我会放弃。我想知道是否有更有效的方法在Java中检查除轮询之外的文件,然后每隔X秒钟进行一次睡眠?如果不是这样做最有效的方式是什么?如何在Java中检查动态创建的文件?

回答

3

您当前必须轮询文件系统,如您所述。 Java 7应该有file system notifications,所以这应该在某些时候变得更容易。

+0

这很酷。不能等。 – 2010-04-27 21:34:54

1

如果同一个程序正在创建文件作为轮询,则可以改为创建文件的逻辑使用Object.notify()通知程序的一部分。 wait()和notify/notifyAll()机制的一般描述可以在这里找到:http://java.sun.com/docs/books/tutorial/essential/concurrency/guardmeth.html

+0

这似乎是一个好主意,但不适用于我的情况,因为该文件是在外部生成的。 – Traker 2010-04-27 21:09:09

0

您可以尝试JPoller来轮询文件更改。

如果您在Windows上运行,则可以获取目录更改通知,请参阅Obtaining Directory Change Notifications。当然,这不是跨平台的,并且需要使用JNA或类似的本地网桥。实际上,JNA的offsers如类,FileMonitor类(在下载中)使用底层平台的文件更改通知。

如果你正在观看一小部分或更少的文件,那么当然,轮询不太可能是一个性能问题,它只是不是一个“感觉良好”的解决方案 - 但并不是那么糟糕,纯java解决方案。另一方面,监视包含数千个文件的目录将受益于来自操作系统的直接消息。