あなたが代わりにFiles.findのFiles.walkFileTreeを使用することができます。
List<String> files = new ArrayList<>();
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attr)
throws IOException {
if (attr.isRegularFile()) {
files.add(startPath.relativize(file).toString());
}
return super.visitFile(file, attr);
}
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attr)
throws IOException {
if (Files.isHidden(dir) ||
(attr instanceof DosFileAttributes &&
((DosFileAttributes) attr).isHidden())) {
return FileVisitResult.SKIP_SUBTREE;
}
return super.preVisitDirectory(dir, attr);
}
});
コードが長く見えますが、それはFiles.findよりも効率の低いません。
(DosFileAttributesの具体的な取扱いがそこにある理由あなたが迷っているならば、それはdocumentation for Files.isHidden状態ので、「それは、ディレクトリおよびDOS hidden
属性が設定されていない場合、Windows上のファイルが隠されたと考えられている。」です)
出典
2017-03-08 20:08:03
VGR
ストリームをフィルタリングしてファイルが非表示になっているかどうかを確認できますか? –
@AndriiAbramov隠しファイルを無視するだけなので、これはうまくいきません。隠しディレクトリにあるファイルを無視するだけです – Moonlit