java - 尝试使用 java 8 从系统根目录递归列出所有文件时出现“Config.Msi”目录问题
问题描述
我试图递归地列出系统根目录、目录和单个文件中的所有文件,代码运行没有任何异常,但是当代码找到“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
似乎非常适合。
推荐阅读
- php - 如何查看 Ajax 传递给 PHP 的数据以及 PHP 对数据的作用 - 下拉菜单选项
- regex - URl 正则表达式验证器 HTML5
- mysql - mysql覆盖索引是否遵循最左边的索引前缀?
- python - 如何使用行为在python中编写简单的组件测试
- sql-server - 将 SQL 行转换为列
- java - Spring @PropertySource 无法打开,因为它不存在
- javascript - 从用户服务中的firestore返回用户数据返回null
- javascript - 有没有办法在没有 setState 的情况下重新渲染功能性 React.js 组件?
- mysql - Mysql Query 从表中提取最新的 5 个搜索
- php - 更改apache端口后url不起作用?