java中的一个小问题

    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;
}