下面是我的程序和目录结构:我的意图是把一个目录下的所有JAVA文件方到ArrayList里面   但是不知道为什么总得不到想要的结果  我想问题大概在递归的逻辑  又找不到  希望大家耐心教教小弟。我的目录是这样的io[countline(Count.java , Test.java),  InputStream.java]package cn.com.csuinfo.io.countline;import java.io.File;
import java.util.*;public class Count {
ArrayList<File> al = new ArrayList<File>();
File[] files = null;

public ArrayList<File> countLine(File file){
files = file.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()){
countLine(files[i]);
}else{
al.add(files[i]);
}
}
return al;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Count c = new Count();
ArrayList<File> al = c.countLine(new File("D:/java/project/source/cn/com/csuinfo/io"));
for(File f : al){
System.out.println(f);
}
}
}
运行结果:
D:\java\project\source\cn\com\csuinfo\io\countline\Count.java
D:\java\project\source\cn\com\csuinfo\io\countline\Test.java
D:\java\project\source\cn\com\csuinfo\io\countline\Test.java

解决方案 »

  1.   


    File[] files = file.listFiles();//不要用成员变量,不然递归过程中相当于一个全局的,不会更新
      

  2.   

    LS说得对。只要把
    File[] files = null; 去掉,
    files = file.listFiles(); 这里定义,就是前面加个File[]就行了。
    要不当遇到目录的时候就递归,files就变了子目录了,调用完了出来files还是表示子目录,就结束了,
    因为子目录已经遍历完了。
      

  3.   

    File[] files = file.listFiles();//不要用成员变量,不然递归过程中相当于一个全局的,不会更新最佳答案  问题解决了   谢谢每位给我回来的大侠  谢谢你们