在目录中列出文件时,我注意到了一种奇怪的行为。我的情况是,我有一个txt文件列表,我保存在数据库中,对应于这些数据文件,有一些xml文件包含每个txt的一些标记,这些标记在db中作为它们的元属性相关联。
当我列出目录中的文件并读取xml文件时,流是如何改变的,并再次列出已经添加到db中的文件。文件名在我的db中是id并且是唯一的,重新列出它们违反了主键约束。
我想知道为什么名单会受到干扰?
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一样,but被处理并保存在db中,但在后面的循环中再次列出。
发布于 2014-06-10 08:41:04
您的上一个comment似乎准确地描述了这里发生的事情。
我猜DirectoryStream添加(或不添加)新保存的文件,而不检查它们以前的清单。
在本例中,最好在处理条目之前将DirectoryStream中的条目添加到另一个Iterable甚至Set (例如HashSet),然后检查它们是否在Set之前(Set#add返回的布尔值正是出于这个原因)。
https://stackoverflow.com/questions/24115698
复制相似问题