我的父目录中有三个文件是
c:/test/abc.png
c:/test/gibby.png
c:/test/cisco.doc
FileVisitResult
将访问我的父目录以查找保留在目录中的所有文件,它将以完整路径获取文件并将其发送到我的subfunction
类以进行进一步处理。但我发现cisco.doc
已经两次发送到subfunction
课程。如果文件数量开始增长,则会出现问题。
这是我的源代码
while(true)
{
try {
Files.walkFileTree(ParentDir, new FileVisitor<Path>()
{
@Override
public FileVisitResult postVisitDirectory(Path sub, IOException exc) throws IOException
{
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path sub, BasicFileAttributes attrs) throws IOException
{
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
Path tempPath1;
System.out.println("@The abs path of the file is"+file);
java.util.Iterator<Path> it = MyFileList.iterator();
while(it.hasNext())
{
tempPath1 = it.next();
if(tempPath1 == null) //first round
{
System.out.println("empty list");
MyFileList.add(file);
}
else if(tempPath1 == file) //after first round
{
System.out.println("same in the list : "+file);
}
else if(tempPath1 != file) //after first round
{
System.out.println("not same in the list : "+file);
x = true;
}
}
System.out.println(x);
if(x = true)
{
MyFileList.add(file);
subfunction sb1 = new subfunction ();
sb1.send(file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException
{
return FileVisitResult.CONTINUE;
}
});
}
catch (IOException e)
{
e.printStackTrace();
}
}
如您所见,有while
循环检查条件,如果条件为真,FileVisitResult
将开始遍历我的父目录并选择文件路径,我将文件路径存储到HashSet
和send()
将发送到我的subfunction
课程。我将文件路径存储到HashSet中的原因是用于比较FileVisitResult
发现的新文件路径和存储在HashSet
内的先前发现的路径,以避免传递给{的任何重复文件路径{1}}但它没有按预期工作
1)如何确保每个文件路径只传递到send()
一次?
2)确保send()
只发现一次文件并且在第二次迭代期间不会回复同一文件的任何想法