2016-11-17 50 views
2

我想在我的外部高清中遞歸地編寫一個程序列表文件,但有這個回收站文件夾,我沒有訪問權限。我想跳過該文件夾,但似乎無法做到這一點。Files.walk跳過目​​錄

下面的代碼有什麼問題嗎?

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

它不斷給我這個錯誤:

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) 
    ... 

回答

0

沒有什麼不對您的代碼,這是一個設計問題與Files.walk。詳情請參閱this answer

+0

哦好吧,所以我想我必須這樣做的遞歸功能的舊時尚方式? –

+0

不,不一定。有幾種方法你可以走文件樹。例如,您可以使用'FileVisitor'(如此處所述)(https://docs.oracle.com/javase/tutorial/essential/io/walk.html) –