Files.walk (), рассчитать общий размер

Я пытаюсь рассчитать размер файлов на моем диске. В Java-7 это можно сделать с помощьюFiles.walkFileTree как показано в моем ответеВот.

Однако, если я хотел сделать это, используя потоки Java-8, это будет работать для некоторых папок, но не для всех.

public static void main(String[] args) throws IOException {
    long size = Files.walk(Paths.get("c:/")).mapToLong(MyMain::count).sum();
    System.out.println("size=" + size);
}

static long count(Path path) {
    try {
        return Files.size(path);
    } catch (IOException | UncheckedIOException e) {
        return 0;
    }
}

Выше код будет хорошо работать для путиa:/files/ но дляc:/ это бросит ниже исключения

Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: c:\$Recycle.Bin\S-1-5-20
at java.nio.file.FileTreeIterator.fetchNextIfNeeded(Unknown Source)
at java.nio.file.FileTreeIterator.hasNext(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.LongPipeline.reduce(Unknown Source)
at java.util.stream.LongPipeline.sum(Unknown Source)
at MyMain.main(MyMain.java:16)

Я понимаю, откуда это исходит и как этого избежать, используя API Files.walkFileTree.

Но как этого исключения можно избежать, используяFiles.walk () API?

Ответы на вопрос(4)

Ваш ответ на вопрос