【统计xx目录下Java代码共有多少行】

机缘

昨天面试,被问到写过多少行代码?一时不知道怎么回答,也没个概念,因为从来没统计过代码行数!
面试结束后,就想着统计一下


实现

其实实现也不难,我们只需把指定目录下的所有以.java结尾的文件的行数求和即可,这里使用深度优先遍历进行统计,代码如下:

import java.io.*;
import java.util.Scanner;

/**
 * @program: leetCode
 * @description: 求某个目录下的java代码有多少行
 * @author: liangjiayy
 * @create: 2022-09-29 21:40
 **/
public class SumOfCodeLineCount {
    
    
    /**
     * 要统计的文件的后缀名
     */
    private static final String SUFFIX = ".java";

    public static void main(String[] args) {
    
    
        //定义起始目录
        String dir = "C:\\Users\\AikeTech\\IdeaProjects\\";

        System.out.println("你要统计的起始目录是:\"" + dir + "\",确定请输入\"Y\":");
        String input = new Scanner(System.in).nextLine();
        if (!"y".equalsIgnoreCase(input.trim())) {
    
    
            System.out.println("你已取消统计!");
            return;
        }

        //获取该目录下所有java代码的行数
        long lineCount = getLineCount(dir);
        System.out.println("\"" + dir + "\"目录下,后缀为\"" + SUFFIX + "\"的代码共有 " + lineCount + " 行!");
    }

    /**
     * 获取某个目录下,所有后缀名为 SUFFIX(类变量)  的文件的行数
     *
     * @param dir
     * @return
     */
    private static long getLineCount(String dir) {
    
    
        File file = new File(dir);

        if (!file.isDirectory()) {
    
    
            //是个文件,统计有多少行
            if (dir.endsWith(SUFFIX)) {
    
    
                return statisticalLineCount(file);
            }
            return 0;
        }

        //是个目录,递归
        String[] list = file.list();
        if (list == null) {
    
    
            return 0;
        }

        long sum = 0;
        for (String l : list) {
    
    
            //父目录 + 分隔符 + 文件/目录名
            sum += getLineCount(dir + "\\" + l);
        }

        return sum;
    }

    /**
     * 统计某个文件的行树
     *
     * @param file
     * @return
     */
    private static long statisticalLineCount(File file) {
    
    
        try (LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(file))) {
    
    
            long length = file.length();
            lineNumberReader.skip(length);
            return lineNumberReader.getLineNumber();
        } catch (FileNotFoundException fileNotFoundException) {
    
    
            fileNotFoundException.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        return 0;
    }
}

运行结果:
在这里插入图片描述

使用

如何使用上面的类?

  • 如果你也是要统计某个目录下所有java代码的行数,则修改上面代码中的dir即可:会查找该目录下的所有以.java结尾的文件的行数
    在这里插入图片描述

  • 如果统计其他文件的行数,还需要修改以下变量(后缀名)
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_55155505/article/details/127114972
今日推荐