Files.walk (), Gesamtgröße berechnen

Ich versuche, die Größe der Dateien auf meiner CD zu berechnen. In Java-7 könnte dies mit erfolgenFiles.walkFileTree wie in meiner Antwort gezeigtHier.

Allerdings, wenn ich dies mit Java-8-Streams tun wollte, funktioniert es für einige Ordner, aber nicht für alle.

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;
    }
}

Der obige Code eignet sich gut für den Pfada:/files/ aber fürc:/ es wird unter Ausnahme werfen

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)

Ich verstehe, woher es kommt und wie man es mit der Files.walkFileTree API vermeidet.

Aber wie kann diese Ausnahme vermieden werden?Files.walk () API?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage