很多时候我都会在文件中去提取或者找出相似的文件之类的,为了熟悉在文件集上面的操作,特实现如下案例
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
/**
* All rights reserved.
* Created by zhaideyin on 2017/10/17.
* Description:find all java file in TIJ4-code
*/
public class FileTreeInfo implements Iterable<File> {
public ArrayList<File> mfileList=new ArrayList<File>();
public ArrayList<File> mdirList=new ArrayList<File>();
@Override
public Iterator<File> iterator() {
return mfileList.iterator();
}
public void addAll(FileTreeInfo other){
mfileList.addAll(other.mfileList);
mdirList.addAll(other.mdirList);
}
public FileTreeInfo iteratorFile(File file,String regx){
FileTreeInfo mresult=new FileTreeInfo();//每一次迭代都会产生新的文件树结构
for(File mfile:file.listFiles()) {
if (mfile.isDirectory()) {
System.out.println("-"+mfile.getName());
mresult.mdirList.add(mfile);
mresult.addAll(iteratorFile(mfile, regx));
} else if (mfile.getName().matches(regx)) {
mresult.mfileList.add(mfile);
System.out.println("---"+mfile.getName());
}
}
return mresult;
}
@Override
public String toString(){
return "dir:"+mdirList.toString()+"\n"+"file:"+mfileList.toString();
}
public static void main(String[] args) {
FileTreeInfo fileTreeInfo=new FileTreeInfo();
File file=new File("C:\\Users\\Administrator\\Desktop\\OS专用文件夹\\TIJ4-code");
fileTreeInfo.iteratorFile(file,".*\\.java");
}
}
其中在递归遍历的时候如果处理不好遍历的次数,就会造成java.lang.StackOverflowErro错误