public static void main(String[] args) {
ArrayList<String> al=bb(new File("D:\\Java\\stone\\新建文件夹"));
for (String string : al) {
System.out.println(string);
}
}
public static ArrayList<String> bb(File a){
ArrayList<String> a1=new ArrayList<>();
File[] b =a.listFiles();
for (File file : b) {
if (!(file.isDirectory())) {
if (file.getName().endsWith(".txt")) {
a1.add(file.getName());
}
}else{
bb(file);
}
}
return a1;
}
这是哪里出问题了,要求是遍历一个文件夹的所有.txt文件,然后是txt文件的加入集合里面,最后再打印集合,我那个路径明明有7个.txt文件却一个也找不到。是因为在bb()方法中没有sysout么?
打个断点,一目了然。。。。
我用你的代码跑的,没有问题。你的程序是不是没跑啊
a1.addAll(bb(file))
public static ArrayList bb(File a){
ArrayList a1=new ArrayList<>();
File[] b =a.listFiles();
for (File file : b) {
if (!(file.isDirectory())) {
if (file.getName().endsWith(".txt")) {
a1.add(file.getName());
}
}else{
a1.addAll(bb(file))
}
}
return a1;
}
代码有问题,你每次递归的时候都新建了一个ArrayList,导致方法返回的是最后一个目录里的.txt文件。
public static void main(String[] args) {
List list=new ArrayList();
list=listFile("D:/长亮/xionlang", ".txt", ".txt", list);
for (File file:list) {
System.out.println(file.getName());
}
}
/**
* 获取某目录下包含某文件名的所有File递归调
* 用listFile是个初始不为null,长度为0的list集合
* @param dir //某路径下
* @param prefix,查找文件名包含什么,你这里可以是包含.txt
* @param endStr后缀是什么
* @return
*/
public static List<File> listFile(String dir, String prefix,String endStr,List<File> listFile) {
try {
File file = new File(dir);
if (!file.isDirectory()) {
return listFile;
}
File[] files = file.listFiles();
for (int i = 0, len = files.length; i < len; i++) {
if (files[i].isDirectory()) {
listFile(files[i].getPath(), prefix,endStr, listFile);
} else {
if (files[i].getName().contains(prefix)) {
if(endStr==null){
listFile.add(files[i]);
}
if(endStr!=null && files[i].getName().endsWith(endStr)){
listFile.add(files[i]);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return listFile;
}