遍历D盘时发现的2个小疑点,诚心求教

遍历D盘时发现的2个小问题,诚心求教
这个代码是用来遍历D盘里所有文件的。
有2个问题:
1.文件夹数量和文件总大小的统计都没有问题,但是统计出来的文件数量却比使用Windows属性统计出来的多1个,不知道这个是为什么?
2.如果将有注释的那行代码注释掉之后,运行结果出来个空指针提示,如下:(虽然可以执行完毕,但这个空指针提示是什么意思?)
****************************************************
java.lang.NullPointerException
at t20141104.TestFile.show(TestFile.java:13)
at t20141104.TestFile.show(TestFile.java:15)
at t20141104.TestFile.main(TestFile.java:30)
文件数量:37992
文件夹数量:9510
文件总大小:25957113869
****************************************************

import java.io.File;

public class TestFile {
int fileCount = 0;
int dirCount = 0;
long tSize = 0;
public void show(String sourceFile){
try{
File file = new File(sourceFile);
File[] files = file.listFiles();
for(File fi:files){
if(fi.isDirectory()){
show(fi.getAbsolutePath());
dirCount ++;
}else if(fi.isFile()){
    System.out.println(fi);//如果将这行注释掉,就会有空指针提示
    fileCount ++;
tSize += fi.length();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
TestFile tf = new TestFile();
tf.show("d:\\");
System.out.println("文件数量:" + tf.fileCount);
System.out.println("文件夹数量:" + tf.dirCount);
System.out.println("文件总大小:" + tf.tSize);
}
}


------解决思路----------------------
是不是有隐藏文件啊
------解决思路----------------------
 File[] files = file.listFiles();
这句有可能为null的
public File[] listFiles() {
        String[] ss = list();
        if (ss == null) return null;
        int n = ss.length;
        File[] fs = new File[n];
        for (int i = 0; i < n; i++) {
            fs[i] = new File(ss[i], this);
        }
        return fs;
    }


  String[] ss = list();
        if (ss == null) return null;

------解决思路----------------------
每个盘下面都有个
System Volume Information
这个文件,是系统文件
受保护的
访问不了
------解决思路----------------------
遍历D盘时发现的2个小疑点,诚心求教
------解决思路----------------------
引用:
Quote: 引用:

file.listFiles() 如果对这个文件没有读写操作,那么这个函数会返回null,具体的可以查看File的api文档;
 System.out.println(fi);//如果将这行注释掉,就会有空指针提示   这个去掉没关系吧

如果不去掉,运行是没有任何问题的,就是因为去掉后才会有空指针提示,所以对这个结果想不明白,才发帖求教的


如果不去掉运行也是有问题的,之所以你看不到是因为文件太多了,把console占满了,你可以进行重定向看看,肯定有空指针的