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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗凯健 中级黑马   /  2013-8-29 10:46  /  1322 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-8-29 20:14 编辑

在毕老师的视频看到的。

            private static void showdir(File dir)  {
                File[] f = dir.listFiles();
                for (int x = 0; x < f.length; x++) {
                        if (f[x].isDirectory())
                                showdir(f[x]);
                        else
                                System.out.println(f[x]);
                }


然后主函数调用这个showdir方法,传入一个目录。我自己测试的时候,遍历到最后会引发一个空指针异常,老师视频里没有,怎么回事?

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2

查看全部评分

10 个回复

倒序浏览
这段程序是没有问题的,
引发了空指针原因  还可能是在你的主体函数体里 ,
你可以查查main()其它语句有没有报空的可能
回复 使用道具 举报
遍历到最后引发一个空指针异常 说明前面的遍历正常,也就是其中有一个file[]数组没有获取到元素,数组中没有任何元素,你调用f.length当然引发空指针异常 亲,明白了?
回复 使用道具 举报
范龙波 发表于 2013-8-29 10:56
这段程序是没有问题的,
引发了空指针原因  还可能是在你的主体函数体里 ,
你可以查查main()其它语句有没有 ...

。。不会吧,main里面就封装了一个文件夹对象和调用了函数
回复 使用道具 举报
月黑风高 发表于 2013-8-29 11:03
遍历到最后引发一个空指针异常 说明前面的遍历正常,也就是其中有一个file[]数组没有获取到元素,数组中没 ...

我又看了一下。。程序还没运行到最后,还有几个文件没能读出来。或者是我文件的问题?
回复 使用道具 举报
罗凯健 发表于 2013-8-29 11:13
我又看了一下。。程序还没运行到最后,还有几个文件没能读出来。或者是我文件的问题?
...

当然了,其中有一个file数组中的元素为空,就会出现空指针异常,空指针异常为运行时异常,程序就会停止。
file封装时必须确保每一个数组都有元素,先判断一下!
回复 使用道具 举报
深度遍历文件夹代码展示:
public class Demo {
        public static void main(String[] args) throws IOException {
                //封装目录为file对象
                File dir=new File("D:\\SogouWP");
                showAll(dir);
        }        
        public static void showAll(File file){
                //获取该目录下的所有文件及文件夹对象
                File[] files=file.listFiles();
                //遍历每个对象
                for (File f:files) {
                        //如果是文件夹,继续获取其中的内容
                        if(f.isDirectory())
                                showAll(f);
                        //不是文件夹,打印文件的绝对路径
                        System.out.println(f.getAbsolutePath());
                }
        }
}
使用增强for循环,避免调用file.length出现空指针。
回复 使用道具 举报
package cn.itcast.bolg;

import java.io.File;
/*
请教一下一个递归显示文件目录的问题
*/
//关于递归,其实就是不断的在调用自己的函数
//传文件路径是最好先判断下是否存在           exists()---判断是否存在
public class Recursion {
        public static void main(String[] args) {
                File file = new File("E:/html阶段授课");             //存在的路径
                File file2 = new File("E:/cc");                   //不存在的路径
                showdir(file);                                    //正常运行
                showdir2(file2);                                  //会抛异常  java.lang.NullPointerException               
        }

        private static void showdir(File dir) {
                File[] f = dir.listFiles();
                if(dir.exists())                               //判断是否存在
                System.out.println(f.length+"ddd");;         
                for (int x = 0; x < f.length; x++) {
                        if (f[x].isDirectory())                    //判断是文件夹
                                showdir(f[x]);                          //递归
                        else
                                System.out.println(f[x]);
                }
        }
        private static void showdir2(File dir){
               
                File[] f = dir.listFiles();
                //if(dir.exists())                           //判断文件是否存在
                for (int x = 0; x < f.length; x++) {         //循环遍历
                        if (f[x].isDirectory())                  //是文件夹
                                showdir(f[x]);                       //递归
                        else
                                System.out.println(f[x]);            
                }
        }
}


评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
   public static void showdir(File dir)  {
        File[] f = dir.listFiles();
        if(f!=null){
                for (int x = 0; x < f.length; x++) {
                        if (f[x].isDirectory())
                                showdir(f[x]);
                        else
                                System.out.println(f[x]);
                }
        }
    }
先判断f是否为空,在执行就不回有空异常了
回复 使用道具 举报
你应该先判断一下是否为空,再执行就不会有空异常了;
这个是我写的递归显示文件的代码,你看下,也许有借鉴作用:
  1. import java.io.File;

  2. public class ListDirectoryDemo {
  3.         public static void main(String[] args) {
  4.                 File file = new File("d:"+File.separator);
  5.                 list(file);
  6.         }
  7.         public static void list (File file){
  8.                 if(file.isDirectory()){
  9.                         File lists[] = file.listFiles();
  10.                         if(lists != null){
  11.                                 for(int i = 0; i<lists.length; i++){
  12.                                         list(lists[i]);
  13.                                 }
  14.                         }
  15.                 }
  16.                 System.out.println(file);
  17.         }
  18. }
复制代码
回复 使用道具 举报
我发现了一个问题(问题没解决的,昨天没网上= =),就是当showdir()里面传入盘符的时候才会报这个空指针异常,而传入一个文件夹就不会出问题。我就想会不会是隐藏文件的问题,然后我传入一个有隐藏文件的文件夹,结果也没报错。传入盘符根目录就会报异常。。但是可以运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马