Files.walkFileTree(Path, Set<FileVisitOption>, int, FileVisitor)
FileVisitOption.FOLLOW_LINKS をオンにしてメソッドを使用する。親ディレクトリにリダイレクトするシンボリック リンクで無限ループが発生します。このJava チュートリアルでは、次の手順で問題を引き起こしている特定のシンボリック リンクを検出する方法について説明します。
ファイルに対して visitFile メソッドが呼び出されます。このオプションを指定し
FOLLOW_LINKS
、ファイル ツリーに親ディレクトリへの循環リンクがある場合、ループしているディレクトリはvisitFileFailed
メソッドでFileSystemLoopException
. 次のコード スニペットは、循環リンクをキャッチする方法を示しており、コピーの例からのものです。
@Override
public FileVisitResult
visitFileFailed(Path file,
IOException exc) {
if (exc instanceof FileSystemLoopException) {
System.err.println("cycle detected: " + file);
} else {
System.err.format("Unable to copy:" + " %s: %s%n", file, exc);
}
return CONTINUE;
}
それは機能し、特定のファイルを検出します..しかし、無限ループは残ります。無限ループに陥ることなく FileTree 全体を探索するために、問題を引き起こしているシンボリック リンクのみをスキップするにはどうすればよいでしょうか?