黑马程序员技术交流社区

标题: 【递归问题】请教:如何获取某个目录下所有文件及文... [打印本页]

作者: 龚首道    时间: 2013-7-13 11:46
标题: 【递归问题】请教:如何获取某个目录下所有文件及文...
我想用递归方法打印出C盘下多有目录名和文件名(包括子文件夹和其中的文件),就像金山卫士那样,获取到某个盘符下所有内容,然后对文件进行管理(如:排序后进行大文件管理);但是事与愿违——打印不完整,不能输出所有内容,程序停止并报“空指针异常”。
是不是子目录里的文件及文件夹个数大于了上级目录中的个数,也就是这里for (int x = 0; x<files.length; x++)的files.length的问题?
请同志们帮我调试调试,看看问题出在哪里了?谢谢!

  1. import java.io.*;
  2. class  FileDemo
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 File dir = new File("c:\\");
  7.                 showDir(dir);
  8.         }
  9.         public static void showDir(File dir)
  10.         {
  11.                 sop(dir);//打印当前目录

  12.                 File[] files = dir.listFiles();//将“dir”目录下的所有对象存入files数组
  13.                
  14.                 //遍历files
  15.                 for (int x = 0; x<files.length; x++)
  16.                 {
  17.                         //如果files[x]为目录,而且它下面还有内容,则再次调用本功能遍历其中内容,知道取出目录下的所有内容
  18.                         if (files[x].isDirectory())
  19.                         {
  20.                                 showDir(files[x]);
  21.                                 sop(files.length);//自己写上去的,不知道获得的length是什么的长度
  22.                         }
  23.                         sop(files[x]);//打印当前目录下的所有内容
  24.                 }
  25.         }
  26.         public static void sop(Object obj)
  27.         {
  28.                 System.out.println(obj);
  29.         }
  30. }
复制代码

作者: 王靖远    时间: 2013-7-13 12:23
if (files[x].isDirectory())你这只判断了是不是目录而没有判断这个目录是不是空的,如果这个目录是空的 File[] files = dir.listFiles();这里的files就是null,null.length就会报空指针异常
作者: 下雨天    时间: 2013-7-13 12:23
你需要在for循环外 用if判断一下files是否为空  如果是空文件夹的话x<files.length这句话就没意义了  所以会出错

作者: 王靖远    时间: 2013-7-13 12:52
我试了一下 在其他盘里可以打印出来列表。唯独c盘不可以。每次都是查询到c:\Documents and Settings这个文件夹后出现空指针异常。我就试了一下进这个目录看看。但是提示该目录拒绝访问,可能就是因为这个问题。
作者: 龚首道    时间: 2013-7-13 17:30
王靖远 发表于 2013-7-13 12:52
我试了一下 在其他盘里可以打印出来列表。唯独c盘不可以。每次都是查询到c:\Documents and Settings这个文 ...

厉害!找到答案了。我研究了好久,郁闷了都,不用判断是否为空就可以了?
作者: 王靖远    时间: 2013-7-13 17:34
龚首道 发表于 2013-7-13 17:30
厉害!找到答案了。我研究了好久,郁闷了都,不用判断是否为空就可以了? ...

不用判断是否为空。我今天又看了下毕老师的视频。如果文件夹内为空listFiles方法返回的是一个长度为0的数组,而不是null,是可以调用方法的。
作者: 龚首道    时间: 2013-7-13 17:40
王靖远 发表于 2013-7-13 17:34
不用判断是否为空。我今天又看了下毕老师的视频。如果文件夹内为空listFiles方法返回的是一个长度为0的数 ...

嗯嗯,好的!
作者: 龚首道    时间: 2013-7-13 17:41
下雨天 发表于 2013-7-13 12:23
你需要在for循环外 用if判断一下files是否为空  如果是空文件夹的话x

不判断好像也可以




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