黑马程序员技术交流社区

标题: 关于毕老师的20天-07源码的疑问 [打印本页]

作者: touch_world    时间: 2014-11-11 04:19
标题: 关于毕老师的20天-07源码的疑问
  1. public class FileDemo3 {

  2.         public static void main(String[] args) {
  3.                 File dir = new File("c:/");
  4.                 showDir(dir);
  5.         }
  6.         public static void showDir(File dir)
  7.         {
  8.                 System.out.println(dir);
  9.                 File[] flies = dir.listFiles();
  10.                 for(int x=0;x<flies.length;x++)
  11.                 {
  12.                         if(flies[x].isDirectory())
  13.                                 showDir(flies[x]);
  14.                         else
  15.                                 System.out.println(flies[x]);
  16.                        
  17.                 }
  18.                
  19.         }
复制代码
这节课上面,直接出了空指针Exception in thread "main" java.lang.NullPointerException,在逻辑上应该是没有问题的呀,我只是换了源而已,大神指点一下


作者: touch_world    时间: 2014-11-11 04:56
空指针就是我创建了指针,但是指针指向的内容是null,这个循环里面,根据文件集合的长度创建了指针,但是指针怎么可能没有内容指向呢??
作者: 王会涛    时间: 2014-11-11 08:27
"C://"楼主写错了,改一下,试试
作者: 王会涛    时间: 2014-11-11 08:30
你指定的最初的文件夹在哪呢,没有啊
作者: MVP    时间: 2014-11-11 09:09
本帖最后由 MVP 于 2014-11-11 09:10 编辑

欠缺判断files是否为空,只要加上files判断是否为空就可以了!
public class FileDemo3 {

        public static void main(String[] args) {
                File dir = new File("c:/");
                showDir(dir);
        }
           public static void showDir(File dir)        {
                System.out.println(dir);
                File[] flies = dir.listFiles();
                if(flies!=null){
                for(int x=0;x<flies.length;x++)
                {
                        if(flies[x].isDirectory())
                                showDir(flies[x]);
                        else
                                System.out.println(flies[x]);

                }
                }

        }
}

作者: 默默丶    时间: 2014-11-11 09:34
因为遍历文件代码在遍历一些系统隐藏文件时候,listFiles()就会返回一个null,
LZ自己去查查API文档 ,上面写了会返回空,所以在遍历文件夹时先判断是否为null
作者: 我就是那匹黑马    时间: 2014-11-11 09:37
如果是 windows 分隔符应该是  C:\\1.mp3  这样的格式吧
作者: 我就是那匹黑马    时间: 2014-11-11 09:41
list 之前 判断 if(  !( f.isHidden() && f.isDirectory())){}      
作者: touch_world    时间: 2014-11-11 16:09
MVP 发表于 2014-11-11 09:09
欠缺判断files是否为空,只要加上files判断是否为空就可以了!
public class FileDemo3 {

谢谢大神 ,你的代码是正确的,后面的视频毕老师也说了这个问题,不过他给的是限定条件上 !flies[x].isHidden()
作者: touch_world    时间: 2014-11-11 16:19
我就是那匹黑马 发表于 2014-11-11 09:41
list 之前 判断 if(  !( f.isHidden() && f.isDirectory())){}

产生空指针不仅仅是隐藏的问题,还有系统有一些无法识别的文件也产生空指针
作者: 我就是那匹黑马    时间: 2014-11-11 17:07
touch_world 发表于 2014-11-11 16:19
产生空指针不仅仅是隐藏的问题,还有系统有一些无法识别的文件也产生空指针 ...

无法识别的文件   是系统文件么?
作者: touch_world    时间: 2014-11-11 17:09
我就是那匹黑马 发表于 2014-11-11 17:07
无法识别的文件   是系统文件么?

系统文件都隐藏了吧,老师视频里说的是看似文件其实是文件夹,看似文件夹其实是文件·哎
作者: 我就是那匹黑马    时间: 2014-11-11 17:13
touch_world 发表于 2014-11-11 17:09
系统文件都隐藏了吧,老师视频里说的是看似文件其实是文件夹,看似文件夹其实是文件·哎 ...

我记得老毕说系统文件 是不行的   这个具体是不是文件   应该不能用看似来形容吧  isFile()   isDirectory()会调用底层判断的吧
作者: zhangyangLengen    时间: 2014-11-11 19:24
的确,遍历文件时候应当判断这个文件是否是系统文件,隐藏文件
作者: touch_world    时间: 2014-11-11 20:30
zhangyangLengen 发表于 2014-11-11 19:24
的确,遍历文件时候应当判断这个文件是否是系统文件,隐藏文件

很多都不懂,请多指教




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