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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李万海 中级黑马   /  2013-3-28 09:22  /  1519 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李万海 于 2013-3-28 17:55 编辑
  1. import java.io.*;
  2. class FileListDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 listRootsDemo();
  7.         }
  8.         public static void listRootsDemo()
  9.         {
  10.                 File[] files = File.listRoots();
  11.                 for(int x=0; x<files.length; x++)
  12.                 {
  13.                         String[] names = files[x].list();//此处出现空指针异常
  14.                         for(int y=0; y<names.length; y++)
  15.                         {
  16.                                 System.out.println(names[y]);
  17.                         }
  18.                 }
  19.         }
  20. }
复制代码
想用以上代码遍历各个盘符下面的文件及文件夹,但是编译之后在如上所标记处出现空指针异常,
为什么File[] 中的元素不能调用list()方法输出其中的目录及文件呢?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

正序浏览
代码没有问题,我的猜测是,你的电脑上有”虚拟光驱“盘,建议不使用for 直接用files[0],files[1]这样挨个目录试一试,并结合输出names看看里边到底存储的是什么,希望对你有帮助;

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  1. import java.io.*;
  2. class FileListDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 listRootsDemo();
  7.         }
  8.         public static void listRootsDemo()
  9.         {
  10.                 File[] files = File.listRoots();
  11.                 for(int x=0; x<files.length; x++)
  12.                 {
  13.                         String[] names = files[x].list();//如果files[x]为文件,返回null。
  14.                         for(int y=0; y<names.length; y++)
  15.                         {
  16.                                 System.out.println(names[y]);
  17.                         }
  18.                 }
  19.         }
  20. }
复制代码
参见:老毕视频第20天第5集 05:51到07:10

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
JDK中,关于File的list()方法的描述:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。
你可以逐个打印这些files[]的name或者绝对路径getAbsolutePath(),会发现 DVD驱动器(G:)也包含在内(我的是这个盘报的nullpoints)这个盘是不包含任何目录和文件的,就是它的list()方法返回了空值。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
代码运行没有空指针异常,是不是哪里配置出问题了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马