2016-11-17 3 views
2

Ich versuche, ein Programm die List-Dateien rekursiv in meinem externen hd zu schreiben, aber es gibt diesen Papierkorb-Ordner, auf den ich keinen Zugriff habe. Ich möchte den Ordner überspringen, kann es aber anscheinend nicht tun.Files.walk Verzeichnisse überspringen

Gibt es etwas falsch mit diesem Code unten?

public static void main(String[] args) throws Exception 
{ 
    String path = "K:\\"; 

    Files.walk(Paths.get(path)) 
      .filter(it -> !it.toString().startsWith("K:\\$RECYCLE.BIN")) 
      .filter(Files::isRegularFile) 
      .forEach(System.out::println); 
} 

Es hält mir diesen Fehler geben:

Exception in thread "main" java.io.UncheckedIOException java.nio.file.AccessDeniedException: K:\$RECYCLE.BIN\S-1-5-21-684815243-3314879918-332412784-1001 
    at java.nio.file.FileTreeIterator.fetchNextIfNeeded(FileTreeIterator.java:88) 
    at java.nio.file.FileTreeIterator.hasNext(FileTreeIterator.java:104) 
    ... 

Antwort

0

Es nichts falsch mit Ihrem Code ist, es mit Files.walk ein Design-Problem ist. Details finden Sie unter this answer.

+0

oh ok also ich denke, ich muss es die alte Mode der rekursiven Funktionen tun? –

+0

Nein, nicht unbedingt. Sie können den Dateibaum auf verschiedene Arten durchlaufen. Zum Beispiel könnten Sie 'FileVisitor' als [hier beschrieben] verwenden (https://docs.oracle.com/javase/tutorial/essential/io/walk.html) –

Verwandte Themen