import java.io.*;
public class FileList
{
public static int fileTotalNum = 0; //文件总数
public static int directoryNum = 0; //文件夹总数
public void FList(File f)
{
String[] s = f.list();
fileTotalNum+=s.length;
for(int i = 0;i < s.length;i++)
{
File filelist = new File(f.getPath()+s[i]);
if(filelist.isDirectory())
{
directoryNum++;
FList(filelist);
}
}
}
public static void main(String[] args)
{
File file = new File("C:\\");
FileList fl = new FileList();
fl.FList(file);
System.out.println("一共有文件:"+fileTotalNum);
}
}
执行以上代码后提示空指针错误,具体如下:
Exception in thread "main" java.lang.NullPointerException
at FileList.FList(FileList.java:10)
at FileList.FList(FileList.java:19)
at FileList.main(FileList.java:28)
大家,知道,这是为什么吗?谢谢了
是在这行报错的: fileTotalNum += s.length; 要先判断一下: if (s != null)
原因: 因为遍历到C盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限,所以调用listFiles方法会返回null。
JDK文档中关于listFiles方法: 抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
PS: 要养成良好的编码习惯,这是刚开始入行时就需要放在头一位的任务,技术可以放在其次,学习的时间长着呢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。