簡體   English   中英

嘗試使用Java 8從系統根目錄遞歸列出所有文件時,“ Config.Msi”目錄出現問題

[英]Problems with “Config.Msi” directory while trying to recursively list all files from system root using java 8

我試圖遞歸地列出系統根目錄,目錄和單個文件中的所有文件,代碼運行無一例外,但是當代碼找到“ Config.Msi”作為目錄時,它給我列出和查找子目錄的函數錯誤。

//Root path scan
for (File file : FilesInDisk) {
    if (file.isFile()){
        System.out.println("---------------------------------------------------------------------------------------------------------");
        System.out.println("[File Detected] => [ " + file.getName()+" ]");
        fileCache.add(fileIndex,file);
        System.out.println("[ Absolute path added to files cache ] [Details] => "+file.getAbsolutePath());
        fileIndex=fileIndex+1;
        System.out.println("---------------------------------------------------------------------------------------------------------");
    }

    else 
        if (file.isDirectory()){
            System.out.println("---------------------------------------------------------------------------------------------------------");
            //Walk into directory and walk more while directories still exist then return and go on with next one
            System.out.println("[Folder Detected] => [ " + file.getName()+" ]");
            System.out.println("[ Absolute path added to files cache ] [Details] => "+file.getAbsolutePath());
            subDirs(file);
            folderIndex=folderIndex+1;
            System.out.println("---------------------------------------------------------------------------------------------------------");
        }
       System.out.println("=> Files Scanned: " + fileIndex);
       System.out.println("Scanning on progress...");
    } 
}

這是subDirs函數

//Look inside directories.
public void subDirs(File ifile){
    File arrayDir[]=ifile.listFiles();
    for (File arr :arrayDir){
        System.out.println("===> " + arr);
    }  
}
[Folder Detected] => [ Config.Msi ]
[ Absolute path added to files cache ] [Details] => C:\Config.Msi
Exception in thread "main" java.lang.NullPointerException
    at malwaredestroyer.MalwareDestroyer.subDirs(MalwareDestroyer.java:58)
    at malwaredestroyer.MalwareDestroyer.walk(MalwareDestroyer.java:89)
    at malwaredestroyer.MalwareDestroyer.main(MalwareDestroyer.java:100)

這是我從輸出控制台收到的錯誤消息,

File.listFiles()的文檔說:

返回:抽象路徑名數組,表示該抽象路徑名表示的目錄中的文件和目錄。 如果目錄為空,則數組為空。 如果此抽象路徑名不表示目錄,或者發生I / O錯誤,則返回null。

因此,可能發生了I / O錯誤,並且返回了null 但是,很難確定這是否是實際問題。

通常,建議盡可能使用java.nio.file包的類,因為它們在發生故障時會引發異常,並且可以更好地定義其行為。

對於您的用例, Files.walkFileTree似乎非常適合。

暫無
暫無

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

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