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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-27 17:38 编辑

同学们,大家在看毕老师视频的时候有没有发现如下的一个问题?
视频地址为:黑马程序员_毕向东_Java基础视频教程第20天-10-IO流(创建java文件列表)
课程代码:
  1. /*
  2. 练习
  3. 将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
  4. 建立一个java文件列表文件。

  5. 思路:
  6. 1,对指定的目录进行递归。
  7. 2,获取递归过程所以的java文件的路径。
  8. 3,将这些路径存储到集合中。
  9. 4,将集合中的数据写入到一个文件中。

  10. */
  11. import java.io.*;
  12. import java.util.*;
  13. class  JavaFileList
  14. {
  15.         public static void main(String[] args) throws IOException
  16.         {
  17.                
  18.                 File dir = new File("d:\\demo");         //运行结果正确,如下图2,毕老师的正确结果是图1
  19. File dir = new File("d:\\");           //运行结果错误,如下图3  (说明:这两句代码运行时只选择一句运行)      

  20.                 List<File> list = new ArrayList<File>();

  21.                 fileToList(dir,list);

  22.                 //System.out.println(list.size());


  23.                 File file = new File(dir,"javalist.txt");
  24.                 writeToFile(list,file.toString());

  25.                


  26.         }
  27.         public static void fileToList(File dir,List<File> list)
  28.         {
  29.                 File[] files = dir.listFiles();

  30.                 for(File file : files)
  31.                 {
  32.                         if(file.isDirectory())
  33.                                 fileToList(file,list);
  34.                         else
  35.                         {
  36.                                 if(file.getName().endsWith(".java"))
  37.                                         list.add(file);
  38.                         }
  39.                 }
  40.         }

  41.         public static void writeToFile(List<File> list,String javaListFile)throws IOException
  42.         {
  43.                 BufferedWriter bufw =  null;
  44.                 try
  45.                 {
  46.                         bufw = new BufferedWriter(new FileWriter(javaListFile));
  47.                         
  48.                         for(File f : list)
  49.                         {
  50.                                 String path = f.getAbsolutePath();
  51.                                 bufw.write(path);
  52.                                 bufw.newLine();
  53.                                 bufw.flush();
  54.                         }

  55.                 }
  56.                 catch (IOException e)
  57.                 {
  58.                         throw e;
  59.                 }
  60.                 finally
  61.                 {
  62.                         try
  63.                         {
  64.                                 if(bufw!=null)
  65.                                         bufw.close();
  66.                         }
  67.                         catch (IOException e)
  68.                         {
  69.                                 throw e;
  70.                         }
  71.                 }
  72.         }
  73. }
复制代码
运行结果附图1、2、3如下:
问题是为什么会出现空指针异常?D盘下的demo文件可以,可是demo文件属于D盘,但是遍历D盘就不行呢?求高手解答


1.png (283.83 KB, 下载次数: 37)

1.png

2.png (290.38 KB, 下载次数: 31)

2.png

3.png (172.88 KB, 下载次数: 31)

3.png

评分

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

查看全部评分

5 个回复

倒序浏览
  File dir = new File("d:\\demo");         //运行结果正确,如下图2,毕老师的正确结果是图1
你和毕老师效果不一样是因为你d:\\demo下的.java文件就那几个,而毕老师d:\\demo文件下有好多.java文件,所以效果不一样,但是实际功能是一样的。
这点你可以不必要那么钻牛角尖。
File dir = new File("d:\\");           //运行结果错误,如下图3  (说明:这两句代码运行时只选择一句运行)      
为什么会报空指针异常呢,我估计是你D盘下根本没有.java文件,所以会报空指针异常。

回复 使用道具 举报
唐晓 发表于 2013-1-26 08:02
File dir = new File("d:\\demo");         //运行结果正确,如下图2,毕老师的正确结果是图1
你和毕老师 ...

你都没有看懂我表达的意思,还有你都没有看懂毕老师的代码的意思   回答的 不着调
但是还是谢谢你的回答
回复 使用道具 举报
前面有人提到这样的问题,因为盘符根目录下有不能读取的文件,File[] files = dir.listFiles();会返回NULL。
可以在 for(File f : files) 之前加上判断  if(files!=null)  执行  for(File f : files)

回复 使用道具 举报
张向辉 发表于 2013-1-27 13:30
前面有人提到这样的问题,因为盘符根目录下有不能读取的文件,File[] files = dir.listFiles();会返回NULL ...

哈哈哈  原来是这样 啊,那就只能从子目录下开始了  谢谢 啊
回复 使用道具 举报
只能从子目录下开始 呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马