Проблемы с каталогом "Config.Msi" при попытке рекурсивного вывода всех файлов из системного корня с использованием Java 8 - PullRequest
0 голосов
/ 06 июля 2019

я пытаюсь рекурсивно перечислить все файлы из системного корня, каталогов и отдельных файлов, код выполняется без каких-либо исключений, но когда код находит «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)

Это сообщение об ошибке, которое я получаю из консоли вывода,

1 Ответ

0 голосов
/ 06 июля 2019

Документация для File.listFiles() гласит:

Возвращает: Массив абстрактных путей, обозначающих файлы и каталоги в каталоге, обозначенном этим абстрактным путем. Массив будет пустым, если каталог пуст. Возвращает ноль, если это абстрактное имя пути не обозначает каталог или если произошла ошибка ввода-вывода.

Так что, возможно, произошла ошибка ввода-вывода и null был возвращен. Однако трудно сказать, является ли это реальной проблемой.

Как правило, рекомендуется использовать классы пакета java.nio.file, где это возможно, поскольку они генерируют исключения в случае сбоев и их поведение лучше определено.

Для вашего случая использования Files.walkFileTree представляется вполне подходящим.

...