有没有办法将数据与文件夹层次结构中的文件相关联?

时间:2015-06-12 17:29:34

标签: java indexing uniqueidentifier tagging subdirectory

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

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. 维护文件路径到标签的映射
  2. 维护文件哈希到标签的映射
  3. 使用选项#2,即使文件被移动,您的标签也会被保留。但如果有人移动并修改了文件,那么标签就会丢失。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

该密钥适合用作HashMap密钥。