[英]How to use Paths(java.nio.file.Paths) in nashorn javascript
[英]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.io
的FileUtils.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.