簡體   English   中英

java.nio.file.Paths - 如何在迭代時跳過無法訪問的文件/文件夾

[英]java.nio.file.Paths - How to skip unaccessible file/folder while iterating

我正在編寫代碼來遍歷我可以訪問的所有文件夾。 但是,當文件夾無法訪問時,我的程序會停止。

我如何繞過該文件夾並繼續尋找其他文件夾? 或者,換句話說,我如何顯示我有權訪問的文件夾和文件?

我正在使用 java.nio.file.Paths (Java 8)。

這是我的代碼:

import java.io.IOException;
import java.nio.file.FileVisitOption;
import java.nio.file.Files;
import java.nio.file.Paths;

// Test File D:\TEST\test.jpg
public class TestIteration{

    // Main
    public static void main(String[] args) throws Exception {
        // Iterate through folders
        String rootFolder = "c:\\";    
        WalkDirTree(rootFolder); // Walks through directory tree and print names of directories/files.      
    }


    // Prints all file/directory names in the entire directory tree
    private static void WalkDirTree(String rootFolder) throws Exception {                   
        Files.walk(Paths.get(rootFolder)).forEach(path -> {
            System.out.println(path);
        });

        System.out.println("_______________________________________DONE");
    }

}

如果無法訪問您指的是“不可讀”,那么我認為您可以使用Files#isReadable 從它的文檔:

測試文件是否可讀。 此方法檢查文件是否存在以及此 Java 虛擬機是否具有允許它打開文件進行讀取的適當權限。 根據實現,此方法可能需要讀取文件權限、訪問控制列表或其他文件屬性,以檢查對文件的有效訪問。 因此,該方法對於其他文件系統操作可能不是原子的。

您的代碼如下所示:

Files.walk(Paths.get(rootFolder)).filter(Files::isReadable).forEach(path -> {
    System.out.println(path);
});

雖然流當然很漂亮,但您可能需要單獨處理每個無法訪問的文件。

在這種情況下,您可以選擇使用org.apache.commons.ioFileUtils.listFiles方法來創建一個簡單的for循環

String[] extensions = {"png","txt"}; // file extensions you might want to target
Collection fileObjects= FileUtils.listFiles(new File("dirPath"),extensions,true);
for (Object obj : fileObjects){
     File file = (File) obj;
     if (!Files.isReadable(file.toPath())) continue; // or do smth else
}

如果您希望針對所有文件而不考慮其擴展名,則傳遞null而不是String數組。

如果您不希望遞歸搜索,則傳遞false而不是true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM