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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闾丘日月 中级黑马   /  2012-5-25 20:09  /  2460 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. <P>public static void main(String[] args){
  2. Test.extractFiles("d:\\");
  3. }
  4. private final static List<String> files = null;
  5. private static  void extractFiles(String dirName){
  6.   File[] files = new File(dirName).listFiles();
  7.   for(File file : files){
  8.    if(file.isDirectory()){
  9.     extractFiles(file.getName());
  10.    }else if(file.getName().endsWith(".java")){
  11.     Test.files.add(file.getName());
  12.    }
  13.   }
  14. }
  15. }
  16. </P>
复制代码
这段代码我一运行就是空指针异常,但是我不会调。debug就是在for file那句断掉。
求指点!

评分

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

查看全部评分

5 个回复

倒序浏览
本帖最后由 张亭 于 2012-5-25 22:51 编辑

楼主,
05.private final static List<String> files = null;
这里的files 定义为final 且指向空
12.    Test.files.add(file.getName());
这句肯定会报错咯
应该在上面new上一个对象

for (File file : files) 前面要加上一个判断 if(files!=null)
因为当dirName不是文件夹时,File[] files = new File(dirName).listFiles();返回空
就导致下面的空指针异常了

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 张晨 于 2012-5-25 23:38 编辑

第一:List没有初始化、、、、、、
第二:递归的那条语句路径不对 extractFiles(file.getName()); 应该改为 extractFiles(dirName+"\\"+file.getName());或者extractFiles(file.getAbsolutePath())
  1. package com.test;

  2. import java.io.*;
  3. import java.util.*;

  4. public class Test {

  5.         public static void main(String[] args) {
  6.                 new Test().extractFiles("D:\\Android\\");
  7.                 for(Iterator it = filesList.iterator();it.hasNext();)
  8.                         System.out.println(it.next());
  9.         }

  10.         private static List<String> filesList = new ArrayList<String>();

  11.         private void extractFiles(String dirName) {
  12.                 File[] files = new File(dirName).listFiles();
  13.                 for (File file : files) {
  14.                         if (file.isDirectory()) {
  15.                                 extractFiles(file.getAbsolutePath());
  16.                         } else if (file.getName().endsWith(".java")) {
  17.                                 Test.filesList.add(file.getName());
  18.                         }
  19.                 }

  20.         }
  21. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
说说final 的问题吧,被final修饰的变量,其引用是不可改变的,其引用的对象可以改变.
private final static List<String> files = null ;
这里的files引用指向null了,下面你再写 files = new ArrayList<String>(); 编译器都不会通过!

评分

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

查看全部评分

回复 使用道具 举报
谢谢大家了,脑子一时秀逗了。。
回复 使用道具 举报
龚龙 发表于 2012-5-26 00:02
说说final 的问题吧,被final修饰的变量,其引用是不可改变的,其引用的对象可以改变.
private final static L ...

补充一下,而且05行和07行的files都不是同一个,05行是一个集合,07是一个数组,没必要定义05行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马