2011-11-20 115 views
8

我想检测一个文件或目录是否已被删除。显然,我无法使用Files.isDirectory(Path)和文件的等价物,因为文件/目录已被删除。WatchService /删除/文件或目录?

我想过使用两个WatchService实例来观察文件更改还是目录更改,然后我知道所有的时间,如果它是一个文件或目录。可悲的是我找不到合适的方法。

编辑:我认为任何其他解决方案关于检查文件名与目录的字符串表示是容易出错的。

+1

您是否尝试[this](http://docs.oracle.com/javase/tutorial/essential/io/notification.html)? – home

+0

看不到这有什么帮助(在使用WatchService之前阅读过它),但也许我是盲目的? ;-) – Johannes

+0

嗯,也许我不明白你的问题吗?您可以注册该服务以在给定目录处“侦听” - 这有什么问题? – home

回答

2

在您正在观看的目录中保留元数据的本地副本 - 从简单的条目列表,以及每个条目是否是文件或目录,以及您删除后可能感兴趣的任何其他属性 - 例如,大小或上次修改时间。一旦收到删除通知,您就可以查阅这些元数据。

当您开始观察循环时,您可以填充此元数据存储 - 并使用ENTRY_CREATE和ENTRY_MODIFY扩展您的观察器,以使您的元数据存储保持最新,同时在监视目录时进行其他更改。当然,这不会没有额外的内存开销来保存这些数据,但对于大多数使用情况来说,它应该是微不足道的。

+0

好主意,但它似乎比我提出的解决方案更具开销。那么,我想不出另一种解决方案。 – Johannes