A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

武汉小菜鸟

中级黑马

  • 黑马币:110

  • 帖子:104

  • 精华:0

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);  
                }  
        }

}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

10 个回复

倒序浏览
我把目录切换到D:\\jdk下没有问题了
回复 使用道具 举报
如果你的文件夹是空的
file.listFiles(); 就返回null
回复 使用道具 举报
半月 发表于 2015-6-6 14:44
如果你的文件夹是空的
file.listFiles(); 就返回null

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

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

这样啊。明白了!!但是,为什么会读取到null的文件夹啊
回复 使用道具 举报
kikt 发表于 2015-6-6 20:22
不是文件夹是null
而是file[]数组是null
file[]是通过file.listFiles()方法读取到的

我是在疑问为什么遍历某些目录就不会发成空指针异常,而遍历某些目录就会发生异常。
在遍历时,file读取到了一个不存在的目录名字,然后把不存在的目录转换成了File[],于是导致了
File[]为null,但是,file到底是怎么读取到一个不存在的目录名字。
回复 使用道具 举报
嘎路的米 发表于 2015-6-6 19:35
这样啊。明白了!!但是,为什么会读取到null的文件夹啊

就是文件夹下面没有文件,文件夹就为null
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马