我知道如何通过此代码创建列表以包含目录中的所有文件
String path = "c:/test";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
但如果我有目录有文件和子目录,子目录有文件和子子目录等等。
我如何创建列表包含目录和子目录中的所有文件?
答案 0 :(得分:1)
你可以这样做:
protected java.util.List<File> setDirMap(File inputDir) {
if (!inputDir.isDirectory()) {
throw new IllegalArgumentException("Input File is not a directory");
}
Set<File> ans = new HashSet<File>();
ans.add(inputDir);
File[] dir = inputDir.listFiles(new FileFilter() {
@Override
/**
* Returns true if pathname is a directory. False if not
*/
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return true;
} else {
return false;
}
}
});
ans.addAll(Arrays.asList(dir));
for (File current : dir) {
ans.addAll(setDirMap(current));
}
return new ArrayList<File>(ans);
}
返回所有目录和子目录。然后,您可以检查每个目录中的任何内容
答案 1 :(得分:0)
试试这段代码,这会使用递归....
import java.io.File;
import java.util.ArrayList;
public class FindIt {
private ArrayList<String> arList = new ArrayList<String>();
public void find(String s) {
File f = new File(s);
File[] fArr = f.listFiles();
for (File x : fArr) {
if (x.isFile()) {
if (x.getName().endsWith(".txt")) {
arList.add(x.getName());
}
else {
continue;
}
}
else {
find(x.getAbsolutePath());
}
}
}
public static void main(String[] args) {
FindIt f = new FindIt();
f.find("D:\\xtop");
for (String fileName : f.arList) {
System.out.println(fileName);
}
}
}