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

发布于 2024-12-17 09:36:58 字数 784 浏览 1 评论 0原文

如何从“非 Linux/Unix”文件系统中必须具有 Inode 或另一个唯一 ID 的 PathFile 实例获取唯一 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()

How do I get a unique ID from a Path or File instance which must have an Inode or another unique ID in a "non Linux/Unix" filesystem? Can't find anything in the API, do I have to use JNI?

Edit: I have two reasons:

  • I want to have a unique mapping from a file in the filesystem to a tree-based representation in a database system.
  • I want to detect renames of a file, which results in a deletion event and a new insertion event when watching a Path via WatchService (at least for Linux/Unix filesystems). Therefore I can't use a Path to detect such renames.

BTW: At first I thought WatchService would trigger an java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY event in case of renames, but I suppose that's Filesystem dependent and/or only happens if the file content itself changes.

So I suppose I would really have to use a JNI-binding to detect renames and maybe moves?

Edit: I think I've finally found how to get a unique file representation: http://download.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html#fileKey()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热情消退 2024-12-24 09:36:58

如果您想要的只是一个唯一的 ID,您可以对文件路径进行哈希处理(使用 sha1),它将为您提供一个唯一的文本 ID

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

If all you want is a unique id, you can hash the file path (using sha1) and it will give you an unique text id.

If you want the real id associated with the file, you'll need to use JNI and have a custom library for each OS.

明月夜 2024-12-24 09:36:58

UNC 路径将是一个唯一的键:“//SERVER/PATH/PATH/FILENAME”,
带有附加的 File.getCanonicalPath()。至少在 Windows 下是这样,而不是驱动器号。

A UNC path would be a unique key: "/ / SERVER / PATH / PATH / FILENAME",
with an additional File.getCanonicalPath(). At least under Windows as opposed to drive letters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文