黑马程序员技术交流社区

标题: 问个复制文件的问题。 [打印本页]

作者: 闾丘日月    时间: 2012-5-25 20:09
标题: 问个复制文件的问题。

  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那句断掉。
求指点!

作者: 张亭    时间: 2012-5-25 22:37
本帖最后由 张亭 于 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();返回空
就导致下面的空指针异常了

作者: 张晨    时间: 2012-5-25 23:31
本帖最后由 张晨 于 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. }
复制代码

作者: 龚龙    时间: 2012-5-26 00:02
说说final 的问题吧,被final修饰的变量,其引用是不可改变的,其引用的对象可以改变.
private final static List<String> files = null ;
这里的files引用指向null了,下面你再写 files = new ArrayList<String>(); 编译器都不会通过!
作者: 闾丘日月    时间: 2012-5-26 00:27
谢谢大家了,脑子一时秀逗了。。
作者: 黑马11期李项京    时间: 2012-5-26 00:37
龚龙 发表于 2012-5-26 00:02
说说final 的问题吧,被final修饰的变量,其引用是不可改变的,其引用的对象可以改变.
private final static L ...

补充一下,而且05行和07行的files都不是同一个,05行是一个集合,07是一个数组,没必要定义05行




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