3

对于那些不熟悉JNotify的人来说,这是一个库,它提供了一种简单的方法来监视目录中的事件。

例如,当文件在选定的文件夹中删除时,将调用“ filedeleted”的方法以及一些参数。以下是 fileDeleted 方法的示例:

public void fileDeleted(int wd, String rootPath, String name) {
   print("deleted " + rootPath + " : " + name);
}

现在,我想知道删除的文件是文件还是目录。我常用的方法是使用给定的路径创建一个新的 File 对象,并使用方法 isFile() 和 isDirectory()

但是,由于该文件已被删除,因此这些方法总是返回 false。

所以这是我的具体问题:我有一个已删除文件或目录的路径,我如何判断它是文件还是目录?有解决方法吗?在这里最好的做法是什么?

先感谢您。

4

3 回答 3

3

我建议为此使用更好的 API,例如Commons IO。它的接口org.apache.commons.io.monitor.FileAlterationListener和方法有这种区别onFile...()onDirectory...(). 或者,这可能是最好的方法,使用 Java 7 附带的新标准功能WatchService,如此所述。

于 2011-11-25T20:35:41.123 回答
2

您正在查看的目录结构有多大?

我的第一直觉是构建目录结构的内部表示,使用一些简单的图遍历算法,然后在每次删除某些内容时进行查找以找出它是什么。

<edit>
如果你知道你的目录结构是一个严格的树,你可以使用一个简单的递归来遍历文件系统,并创建一个Files 或Strings to的映射boolean,这样你就可以进行简单的查找。然后,一旦您构建了地图,使用 JNotify 事件应该很容易维护。
<edit/>

即使对于中型目录,我认为这可以很快完成。这个是来做什么的?是否有另一种方法可以实现相同的目标?

于 2011-11-25T17:51:00.697 回答
0

我面临同样的问题。然而据我了解,JavaWatchService不允许监视子目录,所以我不能使用它(任务是监视对包含约 40K 文件夹的结构的更改)。我将尝试使用简单(且容易出错)的启发式方法继续

如果它包含一个点 ('.'),它就是一个文件。

如果我遇到更复杂的东西,我会发布更新......

于 2015-08-12T13:01:17.500 回答