黑马程序员技术交流社区

标题: 请问下面的代码为什么会报空指针异常啊? [打印本页]

作者: 武汉小菜鸟    时间: 2015-6-6 13:29
标题: 请问下面的代码为什么会报空指针异常啊?
public class ShowFile {

        /**
         * @param args
         */
         public static void main(String[] args)   
            {  
                File file = new File("D:\\");  
                if(file.exists()){  
                    if(file.isDirectory())  
                        show(file);  
                }  
            }  
            public static void show(File file){  
                File [] fi = file.listFiles();  
                System.out.println(file);  
                for(File f:fi){  
                    if(f.isDirectory()){  
                        show(f);  
                    }  
                        System.out.println(f);  
                }  
        }

}
作者: 武汉小菜鸟    时间: 2015-6-6 13:47
我把目录切换到D:\\jdk下没有问题了
作者: 半月    时间: 2015-6-6 14:44
如果你的文件夹是空的
file.listFiles(); 就返回null
作者: 武汉小菜鸟    时间: 2015-6-6 15:30
半月 发表于 2015-6-6 14:44
如果你的文件夹是空的
file.listFiles(); 就返回null

那要怎么改呢?我改了好久还是报异常
作者: 半月    时间: 2015-6-6 16:15
fi 如果为null返回不就好了
作者: 嘎路的米    时间: 2015-6-6 16:23
这是因为你的栈已经装不下递归方法啦,你D目录下的文件太多了,你使用递归的方式去读取目录中的内容,然后有目录又在进入目录中读取,于是就产生了多个show方法在栈内存中一直累加而得不到释放,
累加到一定的次数后栈就装不下了,所以就报出了异常,
你可以换一个目录少点的文件去读取,比如说D盘下的某个目录,这样就不会导致错误了。
作者: 熊乾坤    时间: 2015-6-6 16:24
不明白。。。。
作者: 武汉小菜鸟    时间: 2015-6-6 18:11
嘎路的米 发表于 2015-6-6 16:23
这是因为你的栈已经装不下递归方法啦,你D目录下的文件太多了,你使用递归的方式去读取目录中的内容,然后 ...

恩,谢谢你的建议。问题解决了,是因为当文件夹是空的时候file=null,遍历使用file.length就会报空指针异常,在遍历前加上if(file!=null)就解决了
作者: 嘎路的米    时间: 2015-6-6 19:35
武汉小菜鸟 发表于 2015-6-6 18:11
恩,谢谢你的建议。问题解决了,是因为当文件夹是空的时候file=null,遍历使用file.length就会报空指针异 ...

这样啊。明白了!!但是,为什么会读取到null的文件夹啊
作者: 嘎路的米    时间: 2015-6-6 22:29
kikt 发表于 2015-6-6 20:22
不是文件夹是null
而是file[]数组是null
file[]是通过file.listFiles()方法读取到的

我是在疑问为什么遍历某些目录就不会发成空指针异常,而遍历某些目录就会发生异常。
在遍历时,file读取到了一个不存在的目录名字,然后把不存在的目录转换成了File[],于是导致了
File[]为null,但是,file到底是怎么读取到一个不存在的目录名字。
作者: 武汉小菜鸟    时间: 2015-6-7 00:29
嘎路的米 发表于 2015-6-6 19:35
这样啊。明白了!!但是,为什么会读取到null的文件夹啊

就是文件夹下面没有文件,文件夹就为null




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2