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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© touch_world 中级黑马   /  2014-11-11 04:19  /  1865 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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,在逻辑上应该是没有问题的呀,我只是换了源而已,大神指点一下

评分

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

查看全部评分

14 个回复

倒序浏览
空指针就是我创建了指针,但是指针指向的内容是null,这个循环里面,根据文件集合的长度创建了指针,但是指针怎么可能没有内容指向呢??
回复 使用道具 举报
"C://"楼主写错了,改一下,试试
回复 使用道具 举报
你指定的最初的文件夹在哪呢,没有啊
回复 使用道具 举报
MVP 中级黑马 2014-11-11 09:09:10
报纸
本帖最后由 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]);

                }
                }

        }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

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

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

产生空指针不仅仅是隐藏的问题,还有系统有一些无法识别的文件也产生空指针
回复 使用道具 举报
touch_world 发表于 2014-11-11 16:19
产生空指针不仅仅是隐藏的问题,还有系统有一些无法识别的文件也产生空指针 ...

无法识别的文件   是系统文件么?
回复 使用道具 举报
我就是那匹黑马 发表于 2014-11-11 17:07
无法识别的文件   是系统文件么?

系统文件都隐藏了吧,老师视频里说的是看似文件其实是文件夹,看似文件夹其实是文件·哎
回复 使用道具 举报
touch_world 发表于 2014-11-11 17:09
系统文件都隐藏了吧,老师视频里说的是看似文件其实是文件夹,看似文件夹其实是文件·哎 ...

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

很多都不懂,请多指教
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马