次のディレクトリ構造があるとします
/root/dir
/root/dir/file1.txt
/root/dir/subdir
/root/dir/subdir/file2.txt
そして、次のビジターを使用するとします。
class MyFileVisitor extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs)
throws IOException {
if(Files.isDirectory(file)) {
throw new IllegalStateException("WAT!? Visiting directory: "+file.toAbsolutePath().toString());
}
System.out.println("Visiting file: "+file.toAbsolutePath().toString());
return super.visitFile(file, attrs);
}
walkFileTree の単純なオーバーロードを使用すると、次のようになります。
Files.walkFileTree(Paths.get("/root/dir"), new MyFileVisitor());
すべてが計画どおりに進み、次の出力が表示されます。
Visiting file: /root/dir/file1.txt
Visiting file: /root/dir/subdir/file2.txt
しかし、最大深度を設定しようとすると、状況が崩れ始めます。
Files.walkFileTree(Paths.get("/root/dir"), EnumSet.noneOf(FileVisitOption.class), 1, new MyFileVisitor());
出力:
Visiting file: /root/dir/file1.txt
java.lang.IllegalStateException: WAT!? Visting directory: /root/dir/subdir
これはバグだと確信していますが、最初にコミュニティに尋ねたいと思いました:何か欠けているものはありますか?これは実際に予期された動作ですか? ご確認ありがとうございます!
詳細:
java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)