Java7 / Path / File /获取一个唯一的ID,如文件的Inode

时间:2011-11-21 15:57:10

标签: java java-7

如何从PathFile实例中获取唯一ID,该实例必须在“非Linux / Unix”文件系统中具有Inode或其他唯一ID?在API中找不到任何内容,我是否必须使用JNI?

编辑:我有两个原因:

  • 我希望从文件系统中的文件到数据库系统中基于树的表示具有唯一的映射。
  • 我想检测文件的重命名,当通过Path(至少对于Linux / Unix文件系统)观看WatchService时,会导致删除事件和新的插入事件。因此,我无法使用Path来检测此类重命名。

BTW:起初我认为WatchService会在重命名的情况下触发java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY事件,但我认为文件系统依赖和/或仅在文件内容本身发生变化时才会发生。

所以我想我真的必须使用JNI绑定来检测重命名并且可能会移动吗?

编辑:我想我终于找到了如何获得一个独特的文件表示:http://download.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html#fileKey()

2 个答案:

答案 0 :(得分:3)

如果你想要的只是一个唯一的id,你可以散列文件路径(使用sha1),它会给你一个唯一的文本id

如果您想要与文件关联的真实ID,则需要使用JNI并为每个操作系统提供自定义库。

答案 1 :(得分:0)

UNC路径是唯一的密钥:“/ / SERVER / PATH / PATH / FILENAME”, 使用额外的File.getCanonicalPath()。至少在Windows下,而不是驱动器号。