我正在创建我的项目,我在其中将数据库中的所有PC文件编入索引。 现在我想知道在运行时是删除,移动还是重命名文件 这样我就可以在不重新编制索引的情况下更新数据库。
答案 0 :(得分:3)
如果您想知道您已经知道的特定文件是否已不存在,则可以使用File.exists()
。目录观察程序包将在添加/删除/移动文件时触发事件,但在文件系统中的每个目录上运行目录观察程序线程听起来非常低效。
答案 1 :(得分:1)
我认为java 7一旦发布就可能拥有你想要的东西。请参阅以下link
答案 2 :(得分:1)
在JDK 7出现之前,Java中没有非本机机制来检测文件相关事件(包括删除)。也就是说,即使您能够检测到文件删除,您仍然需要一些算法来在应用程序启动时使索引同步。
当我们做这种事情时,我们通常捕获路径+修改日期+索引中文件的长度(我们使用jdbm btree)。然后,重新索引是同时迭代文件夹树和索引的问题。当您在索引中找到不在文件夹树中的条目时,将其从索引中删除。当您在文件夹树中找到不在索引中的条目时,将其添加到索引中。如果您找到两者中的条目,请检查修改后的日期和大小。
因此,在我们拥有jdk7之前,您几乎坚持使用基于轮询的解决方案(即每隔XX秒更新一次索引)。
请注意,jdk7(除文件夹监控外)在迭代文件方面也会有显着的性能提升(当前基于文件的操作与本机操作相比非常慢)。