java中的一个小问题

想遍历一个路径内所有.txt文件。但是我这样写只能遍历出每一次文件夹中.txt文件
怎么一次统计出所有.txt文件

public static void eachFile(File a){

        int sum=0;

        File[] b= a.listFiles();
        for (File file : b) {


                if (file.isFile()&&file.getName().endsWith(".txt")) {
                    sum++;
                }else  {
                    eachFile(file);
                } 


          }

        System.out.println("文件的数量是"+sum);


    }

把sum定义放到eachFile函数外面,做全局变量。不然每次进函数就把sum清零了

有偿啊~能运行了,留自己支付宝在自己回答的评论里面,给5R。。不是用毛爷爷来衡量什么,知识都是有偿的

/**
 * 获取某目录下包含某文件名的所有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) {
        Log.error(e.getMessage());
    }
    return listFile;
}

可以试着改成前缀是什么

你的情况如果把sum放置在类公共域中,就可以正常运行了,假如你想闭包不产生多余的外部变量,可以如下修改代码:

public static void eachFile(File src){
      System.out.println(countTxt(src));
}
  public static int countTxt(File src){
        int count = 0;
        if(src.isFile() && src.getName().endsWith(".txt")){
            return ++count;
        }
        if(src.isDirectory()) {
            File[] list = src.listFiles();
            for(File element : list){
                count += eachFile(element);
            }
        }
        return count;
    }

private static int sum;
public static void main(String[] args) throws IOException {
eachFile(new File("F:\testspace"));
System.out.println("文件的数量是"+sum);
}
public static void eachFile(File a) throws IOException{
File[] b= a.listFiles();
for (File file : b) {
if(!file.isDirectory()){
if (file.isFile()&&file.getName().endsWith(".txt")) {
System.out.println(file.getCanonicalPath());
sum++;
}
}else{
eachFile(file);
}
}
}