使用带有FOLLOW_LINK的Files.walkFileTree时无限循环

时间:2013-08-13 12:00:54

标签: java file nio

将方法Files.walkFileTree(Path, Set<FileVisitOption>, int, FileVisitor)与FileVisitOption.FOLLOW_LINKS一起使用。 我得到一个无限循环,符号链接重定向到父目录。This java教程解释了如何使用以下指令检测导致问题的特定符号链接的方法:

  

为文件调用visitFile方法。如果您已指定FOLLOW_LINKS选项,并且文件树具有指向a的循环链接   父目录,循环目录报告在   使用visitFileFailed的{​​{1}}方法。下列   代码段显示如何捕获循环链接并来自Copy   例如:

FileSystemLoopException

它工作,它检测特定文件..然而无限循环仍然存在。我怎样才能继续跳过创建问题的符号链接,以便探索整个FileTree而不会陷入无限循环?

2 个答案:

答案 0 :(得分:0)

在上面的示例中,您将返回FileVisitResult.CONTINUEjavadoc表示此枚举中还有其他三个值:SKIP_SIBLINGSSKIP_SUBTREETERMINATE。你可以尝试使用其中一种最适合你情况的东西。

答案 1 :(得分:0)

使用FOLLOW_LINKS行走文件树时会遇到符号链接,这会导致循环回到祖先目录:

  • 不会为链接
  • 调用preVisitDirectory或postVisitDirectory
  • 只会为链接
  • 调用visitFileFailed
  • 不会关注该链接

正如您所看到的,文件树walker逻辑已经阻止了此类型的无限递归,因此只需记录错误消息就没有任何错误。

但是,其他东西必须导致程序中的无限循环。也许您已使用硬链接在文件系统中创建了循环引用?