如何从Path
或File
实例中获取唯一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()
答案 0 :(得分:3)
如果你想要的只是一个唯一的id,你可以散列文件路径(使用sha1),它会给你一个唯一的文本id 。
如果您想要与文件关联的真实ID,则需要使用JNI并为每个操作系统提供自定义库。
答案 1 :(得分:0)
UNC路径是唯一的密钥:“/ / SERVER / PATH / PATH / FILENAME”, 使用额外的File.getCanonicalPath()。至少在Windows下,而不是驱动器号。