[Java]在进行文件遍历时,出现空指针异常
代码如下:
public static void searchFile(File file,String fileName) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()) {
if (f.getName().equals(fileName)) {
System.out.println(f.getAbsoluteFile());
}
}else {
searchFile(f, fileName);
}
}
}
在学习Java的File文件遍历中,运用listFlie()遍历文件时,当盘符直接作为path时会出现空指针异常。而当我改变目录到其他子文件夹时便可以正常运行。
查看报错可以判断File[] 数组为null,而listFile()方法当遍历到没有权限访问的文件时就会返回null。所以初步判断是因为D盘根目录下有无权限访问的文件导致File[] 数组出现null的现象。
解决方法为:在listFile()后for循环前添加数组非空判定。
public static void searchFile(File file,String fileName) {
//考虑非法情况
if (file == null || !file.exists() || file.isFile()) {
return;
}
File[] files = file.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
if (f.isFile()) {
if (f.getName().equals(fileName)) {
System.out.println(f.getAbsoluteFile());
return;
}
}else {
searchFile(f, fileName);
}
}
}
}
同时添加代码优化:首先考虑非法情况,如path不存在或path为文件的情况。同时在找到文件后直接return节省内存资源。
此博客为学习笔记,恳请各位大佬批评指正。