2010-08-02 29 views
8

我有一个文件夹,其中不断有新文件正在转储。在Java中,检测文件系统中的更改的最佳方法(即转储文件的指定文件夹)并将新到达的文件添加到队列数据结构中,以便我可以顺序处理每个传入文件。Java检测文件系统中的更改

我知道File类中的listFiles()函数,但是使用这个函数我只能得到在某个瞬间可用的文件。当然,我可以连续轮询文件夹,并使用线程获取文件列表。但这是最好的方法,还是有更好的方法来实现这一点。

+0

更通用的问题,即不需要特定的目录:http://stackoverflow.com/questions/494869/file-changed-listener-in-java – 2015-04-08 14:20:31

回答

8

连续轮询是做在Java中以现在的方式 - 虽然不轮询过于频繁,它可以是一个相当繁重的操作,如果目录包含了许多条目。

JDK 7将有一个特定的API做只是这java.nio.file.WatchFile

+2

+1的WatchFile – 2010-08-02 12:28:41

+2

你可以链接到JavaDoc instaed一个愚蠢的谷歌搜索。 – Sylar 2010-08-02 13:32:33

+0

连续轮询是一个坏主意。我建议使用JNotify,它可以进入文件系统通知。 – Arnelism 2011-10-20 12:24:05

4

不幸的是,在JDK7发布之前还没有标准的方法来做到这一点。 但是在互联网上有一些库可以使用不同操作系统的本地功能来执行此操作。

我已经看过这些库 jPollerjNotify 但最后我简单地结束投票时,我不得不这样做,这是对我有意思的目录。