下面是我的程序和目录结构:我的意图是把一个目录下的所有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
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
File[] files = file.listFiles();//不要用成员变量,不然递归过程中相当于一个全局的,不会更新
File[] files = null; 去掉,
files = file.listFiles(); 这里定义,就是前面加个File[]就行了。
要不当遇到目录的时候就递归,files就变了子目录了,调用完了出来files还是表示子目录,就结束了,
因为子目录已经遍历完了。