【发布时间】:2011-11-21 15:57:10
【问题描述】:
如何从Path 或File 实例中获取唯一ID,这些实例在“非Linux/Unix”文件系统中必须具有Inode 或另一个唯一ID?在 API 中找不到任何东西,我必须使用 JNI 吗?
编辑:我有两个原因:
- 我希望有一个从文件系统中的文件到数据库系统中基于树的表示的唯一映射。
- 我想检测文件的重命名,这会在通过
WatchService观看Path时导致删除事件和新的插入事件(至少对于Linux/Unix 文件系统)。因此我无法使用Path来检测此类重命名。
顺便说一句:起初我认为WatchService 会在重命名的情况下触发java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY 事件,但我认为这取决于文件系统和/或仅在文件内容本身发生变化时才会发生。
所以我想我真的必须使用 JNI 绑定来检测重命名和移动?
编辑:我想我终于找到了如何获得唯一的文件表示:http://download.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html#fileKey()
【问题讨论】:
-
不能使用文件的完整路径吗?那应该是独一无二的。或者也许将路径的字符转换为十六进制表示......
-
你想用这个做什么?您是否只想保证唯一性?或者您是否需要操作系统的实际实际 inode 编号?如果是后者,为什么?
-
Files.getFileStore(file.toPath).getAttribute("unix:inod").