黑马程序员技术交流社区

标题: 遍历文件时空指针错误! [打印本页]

作者: harborbest    时间: 2013-4-27 14:34
标题: 遍历文件时空指针错误!
本帖最后由 harborbest 于 2013-4-27 21:23 编辑

import java.io.*;
public class FileList
{
public static int fileTotalNum = 0;    //文件总数
public static int directoryNum = 0;    //文件夹总数

public void FList(File f)
{
String[] s = f.list();
fileTotalNum+=s.length;

for(int i = 0;i < s.length;i++)
{
File filelist = new File(f.getPath()+s);
if(filelist.isDirectory())
{

directoryNum++;
FList(filelist);
}
}
}

public static void main(String[] args)
{
File file = new File("C:\\");
FileList fl = new FileList();
fl.FList(file);
System.out.println("一共有文件:"+fileTotalNum);
}
}



执行以上代码后提示空指针错误,具体如下:
Exception in thread "main" java.lang.NullPointerException
        at FileList.FList(FileList.java:10)
        at FileList.FList(FileList.java:19)
        at FileList.main(FileList.java:28)

大家,知道,这是为什么吗?谢谢了

作者: java冬冬    时间: 2013-4-27 15:06
本帖最后由 java冬冬 于 2013-4-27 15:09 编辑

看看程序的这一行: fileTotalNum += s.length;
首先要先判断一下: if (s != null)
JDK文档中关于listFiles方法: 抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。
如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
{:soso_e152:}
修改的代码如下:
  1. import java.io.*;
  2. public class FileList
  3. {
  4. public static int fileTotalNum = 0; //文件总数
  5. public static int directoryNum = 0; //文件夹总数

  6. public void FList(File f)
  7. {
  8. String[] s = f.list();
  9. if (s != null)
  10. {
  11. fileTotalNum+=s.length;

  12. for(int i = 0;i < s.length;i++)
  13. {
  14. File filelist = new File(f.getPath()+s[i]);
  15. if(filelist.isDirectory())
  16. {

  17. directoryNum++;
  18. FList(filelist);
  19. }
  20. }
  21. }
  22. }

  23. public static void main(String[] args)
  24. {
  25. File file = new File("C:\\");
  26. FileList fl = new FileList();
  27. fl.FList(file);
  28. System.out.println("一共有文件:"+fileTotalNum);
  29. }
  30. }

复制代码
运行结果:






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