我们在对盘符根目录进行查询文件时,出现空指针异常,可能是因为盘符内的隐藏文件夹,虽然存在,但是无权调用File[] files = f.listFiles();不能创建数组,返回为null。
import java.io.File;
import java.util.Arrays;
public class RecursionTest {
public static void main(String[] args) {
// file指代D磁盘根目录
File file = new File("D:/");
// 调用ser方法
ser(file);
}
public static void ser(File f) {
// 判断f的合法性
if (f == null || !f.exists()) {
return;
}
//得到当前路径下文件及文件夹的file对象数组
File[] files = f.listFiles();
//通过打印可以看到盘符根目录存在隐藏文件
System.out.println(Arrays.toString(files));
//此时如果使用数组的长度来对当前目录进行是否为空进行判断,报错NullPointerException
if (files.length == 0) {
//换成非空判断就可以解决
// if(files==null){
return;
} else
for (File f1 : files) {
if (f1.isFile() && f1.getName().endsWith(".avi")) {
System.out.println(f1);
} else
ser(f1);
}
return;
}
}
图上可以看到,S-1-5-18这个隐藏的文件夹,虽然判定存在,但是创建的数组为null。
解决方法,在数组之后进行非空判断即可。