ETJava Beta | Java    注册   登录
  • java 统计文件数量 - 递归方式

    发表于 2025-12-02 08:50:08     阅读(67)     博客类别:J2SE

    普通递归方式

     

    package org.test;
    
    import java.io.File;
    import java.io.FilenameFilter;
    
    public class Test {
        private static int fileCount = 0;
        public static void main(String[] args) {
            test(new File("D:/src"));
            //scanDir(new File("D:/src"));
            System.out.println("总文件个数:"+fileCount);
        }
    
        private static void test(File dir){
            if (dir == null || !dir.exists() || !dir.isDirectory()) {
                System.out.println("目录不存在!");
                return;
            }
            System.out.println("开始扫描目录: " + dir.getAbsolutePath());
            File[] files = dir.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File currentDir, String name) {
                    File file = new File(currentDir, name);
                    // 如果是目录,递归调用 test()
                    if (file.isDirectory()) {
                        test(file);
                    }
    
                    // 如果是文件
                    if (file.isFile() && name.toLowerCase().endsWith(".java")) {
                        fileCount++;
                        System.out.println(file.getAbsolutePath());
                        return true;
                    }
    
                    return false;
                }
            });
        }
    
        private static void scanDir(File dir) {
            if (dir == null || !dir.exists() || !dir.isDirectory()) {
                System.out.println("目录不存在!");
                return;
            }
            File[] files = dir.listFiles();
            if (files == null) return;
            for (File file : files) {
                if (file.isDirectory()) {
                    scanDir(file); // 递归处理子目录
                } else if (file.isFile() && file.getName().toLowerCase().endsWith(".java")) {
                    fileCount++;
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
    

     

     

    Lambda方式

     

    package org.test;
    
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class FileCounterStream {
        
        public static long countFilesWithStream(String directory) throws IOException {
            return Files.walk(Paths.get(directory))
                    .filter(Files::isRegularFile)  // 只统计普通文件
                    .count();
        }
        
        public static long countFilesByTypeWithStream(String directory, String extension) throws IOException {
            return Files.walk(Paths.get(directory))
                    .filter(Files::isRegularFile)
                    .filter(path -> path.toString().toLowerCase().endsWith(extension.toLowerCase()))
                    .count();
        }
        
        public static void main(String[] args) {
            try {
                String currentDir = "D:/src";
                
                // 统计所有文件
                long allCount = countFilesWithStream(currentDir);
                System.out.println("所有文件数量: " + allCount);
                
                // 统计Java文件
                long javaCount = countFilesByTypeWithStream(currentDir, ".java");
                System.out.println("Java文件数量: " + javaCount);
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

     

     

     

上一篇: java 求5!


下一篇:莱文斯坦编辑距离算法