【问题标题】:Is there a way to associate data with a file in a folder hierarchy?有没有办法将数据与文件夹层次结构中的文件相关联?
【发布时间】:2015-06-12 17:29:33
【问题描述】:

使用 Java,我正在创建一个程序,它索引文件夹结构并允许用户搜索文件并使用关键字标记文件,然后根据这些标签搜索文件。

我目前一直在使用 FileUtils listFiles 方法遍历文件夹层次结构,这基本上是这个问题:Recursively list files in Java

我还没有开始编写标记功能的代码,但是提前考虑我担心如果在将文件与标记关联后重命名或移动文件,那么它将丢失标记。这违背了我的程序的目的,因此任何人都可以就如何存储位于文件夹层次结构中的每个文件或关联标签提供建议,以便如果文件被重命名或移动,它仍然具有与之关联的标签。

【问题讨论】:

    标签: java indexing uniqueidentifier tagging subdirectory


    【解决方案1】:

    如果您想跟踪文件,即使其名称和/或位置发生变化,您也应该使用其唯一标识符,在大多数文件系统中称为inode。 (我认为 NTFS/Windows 将其称为“文件 ID”。)您可以使用 BasicFileAttributes.fileKey 读取文件的 inode:

    Object key = Files.getAttribute(file.toPath(), "fileKey");
    

    该键适合用作 HashMap 键。

    【讨论】:

    • 这正是我所需要的!你知道其他获取inode的方法吗?不幸的是,我必须使用 Java 6 来开发它,我相信 BasicFileAttributes 是 Java 7。
    • 恐怕您可能不得不从外部进程中读取。在 Linux 中是ls -i filename。 Windows 可能需要使用 PowerShell。
    • 好吧,我认为可能就是这样。但无论如何,你的答案正是我所需要的。只需要找到一种为 Windows 7 编写脚本的方法
    【解决方案2】:

    如果操作系统不支持文件标记,您可以:

    1. 维护文件路径到标签的映射
    2. 维护文件哈希到标签的映射

    使用选项#2,即使文件被移动,您的标签也会被保留。但是如果有人移动并修改了文件,那么标签就会丢失。

    【讨论】:

      【解决方案3】:

      我认为没有办法在不更新标签关系到新创建的文件的情况下执行此操作,因为重命名/mv 操作是在磁盘级别进行的,并且实际上发生了删除和“创建”文件复合操作的背景。因此,不能保证文件甚至会在磁盘上的同一位置。如果您确定文件将具有相同的内容,您可以在 String 对象中获取文件内容的 MD5 签名,然后在查询标签时始终比较它们,当然当文件的内容变化。

      最好的办法是使用带有文件路径和标签的哈希映射,然后在文件名更改时使用目录观察程序更新哈希映射。这是我能想到的最好的!

      【讨论】:

        猜你喜欢
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多