0

在目录中列出文件时,我注意到一个奇怪的行为。我的情况是我有一个 txt 文件列表,我保存在数据库中,并且对应于这些数据文件有 xml 文件,其中包含每个 txt 的一些标签,这些标签与它们在 db 中的元属性相关联。

当我从目录中列出文件并读取 xml 文件时,流如何更改并再次列出已添加到 db 的文件。文件名在我的数据库中是 id 并且是唯一的,重新列出它们违反了主键约束。

我想知道为什么listing会受到干扰?

try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(folderReader,filter){
    for (Path file : directoryStream) {
         // Read XML
         // add txt file to database
         // attach meta props to that file
    }
    }catch(IOException ex){}

现在对于某些文件,它运行良好,但随后一些已列出的文件又回来了。就像 1.txt 已处理并保存在 db 中,但在稍后的循环中再次列出。

4

1 回答 1

1

您的最后一条评论似乎准确地描述了这里发生的事情。

我猜想DirectoryStream添加(或不添加)新保存的文件而不检查它们之前的列表。

DirectoryStream在这种情况下,在处理它们之前将条目添加到另一个Iterable甚至Set(例如HashSet)并检查它们是否在Set之前(Set#add因此返回的布尔值)可能是一个好主意。

于 2014-06-10T08:41:04.917 回答