Мне нравится потоковое решение yura, но оно (и другие) возвращается в скрытые каталоги. Мы также можем упростить использование факта, что listFiles
возвращает ноль для не-каталога.
def tree(root: File, skipHidden: Boolean = false): Stream[File] =
if (!root.exists || (skipHidden && root.isHidden)) Stream.empty
else root #:: (
root.listFiles match {
case null => Stream.empty
case files => files.toStream.flatMap(tree(_, skipHidden))
})
Теперь мы можем перечислить файлы
tree(new File(".")).filter(f => f.isFile && f.getName.endsWith(".html")).foreach(println)
или реализовать весь поток для последующей обработки
tree(new File("dir"), true).toArray