Javaの標準APIにはディレクトリを中身ごとごっそり消すというのが無い。
Files.walk()で中身まで再帰的に取得できるけど、中身のほうが後に来るからそのままでは消せない。
中身が後に来ることもあるというのではなく、中身が後と仕様で決められているので、逆順にすれば消せる。
Files.walk(Path.of("tmp"))
.map(x -> Stream.of(x))
.reduce(Stream.empty(), (x, y) -> Stream.concat(y, x))
.forEach(x -> x.toFile().delete());
ソートするとコストはnlognなので、これより重くなるはず。