Git统计代码行数;Java实现统计代码行数,忽略空行、注释行

这篇具有很好参考价值的文章主要介绍了Git统计代码行数;Java实现统计代码行数,忽略空行、注释行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

某天,产品叫我算下某个项目的代码行数,我一愣,这怎么统计?总不可能一个文件一个文件算吧?后面我找了下,git是可以统计提交到仓库的所有的代码的,不过有个问题,就是假如有些文件我不想算进去怎么办?之后我再查了下,可以只统计指定文件类型的代码的。

Git统计代码行数

在指定项目文件夹里,打开git命令窗口,执行下面的命令(直接复制)

1、统计所有行数

git log --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { 
printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

或者

git ls-files | xargs cat | wc -l

上面两个命令只统计行数,没有细分到文件,下面这个命令是会把每个文件都列出来,并统计每个文件的行数。

 git ls-files | xargs wc -l

2、统计指定文件类型的行数

find . "(" -name "*.java" -or -name "*.xml" -or -name "*.yml" -or -name "*.properties" ")" -print | xargs wc -l

git统计代码行数不算空行,工具类,git,java,github
这个命令会打印出文件和对应的行数。

3、统计某个用户的代码量

git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { 
printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

4、统计某个时间段内的代码量

git log --since=2022-12-06 --until==2022-12-07 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { 
printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

--since:起始时间,--until:终止时间

5、统计某个用户某个时间段内的代码量

git log --since =2022-12-06 --until==2022-12-07 --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { 
printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

还有其他命令,可以参考下 这篇文章 ,比较全。

Java实现统计代码行数

Git可以统计代码行数,但是如果我不想要空行和注释行也算进去怎么办?我找了下,好像没有命令可以忽略空行或注释行,既然Git不行,那我们就自己用代码实现统计。


要统计总代码量,得遍历这个项目下的全部文件,然后读取文件内容,遍历每一行的内容,如果是空行或者注释行就忽略。

实现

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class 统计代码行数 {

    private static long 空行数 = 0;
    private static long 注释行数 = 0;
    private static long 代码行数 = 0;
    private static long 总行数 = 0;

    public static void main(String[] args) {
    	// 这里只统计 \src\main 文件夹里的文件,其他文件像 .idea、test 这些文件夹里的就不算进去了
        循环文件夹("D:\\Java\\workspace\\AssetsJava","\\src\\main\\");
        System.out.println("空行:" + 空行数);
        System.out.println("注释行:" + 注释行数);
        System.out.println("代码行:" + 代码行数);
        System.out.println("总行:" + 总行数);
    }

    private static void 循环文件夹(String 项目路径,String 只统计指定文件夹) {
        File f = new File(项目路径);
        if (!f.exists()){
            System.out.println("项目路径不存在!");
            return;
        }
        File[] childs = f.listFiles(); // 获取这个项目下的文件、文件夹
        for (int i = 0; i < childs.length; i++) {
            File child = childs[i];
            if (!child.isDirectory()) { // 当前文件不是文件夹,就读取
                if (child.getParent().contains(只统计指定文件夹)){ // java文件、xml文件、配置文件 只统计main文件夹下的
                    if (child.getName().matches(".*\\.java$") || child.getName().endsWith(".yml") ||
                            child.getName().endsWith(".properties") || child.getName().endsWith(".xml")) {
                        long 单个文件代码行数 = 统计代码行数(child);
                        System.out.println(单个文件代码行数+"\t\t"+child.getName());
                    }
                }else if ("pom.xml".equals(child.getName())){
                    long 单个文件代码行数 = 统计代码行数(child);
                    System.out.println(单个文件代码行数+"\t\t"+child.getName());
                }
            }else { // 当前文件是文件夹,继续递归
                循环文件夹(child.getPath(),只统计指定文件夹);
            }
        }
    }

    private static long 统计代码行数(File file){
        long 单个文件代码行数 = 0;
        BufferedReader br = null;
        try{
            br = new BufferedReader(new FileReader(file));
            String line = "";
            boolean flag = false; // 用于标记xml多行注释,为true表示当前行在多行注释中,一直到最后一行注释
            while ((line = br.readLine()) != null){
                总行数++;
                String 内容 = line.trim(); // 每一行的内容,去掉空格
                if (flag){
                    注释行数++;
                    // 当多行注释结尾是 --> 说明多行注释结束,重新标记为false,表示当前不在统计多行注释
                    if (内容.endsWith("-->")) flag = false;
                }else {
                    if (内容.length() == 0){
                        空行数++;
                    }else if (内容.startsWith("//") || 内容.startsWith("/**") || 内容.startsWith("*") ||
                            内容.startsWith("*/") || 内容.startsWith("/*") || 内容.startsWith("#")){
                        注释行数++;
                    }else if(内容.startsWith("<!--")){
                        注释行数++;
                        // 当前行属于xml的注释,且结尾不是 --> 时,表示是多行注释,设置标记为true
                        if (!内容.endsWith("-->")) flag = true;
                    }else {
                        代码行数++;
                        单个文件代码行数++;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return 单个文件代码行数;
    }
}

统计结果

git统计代码行数不算空行,工具类,git,java,github
git统计代码行数不算空行,工具类,git,java,github
最后的总行数,是和用Git统计的总行数对得上的。文章来源地址https://www.toymoban.com/news/detail-784978.html

到了这里,关于Git统计代码行数;Java实现统计代码行数,忽略空行、注释行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git统计个人提交代码行数

    在实际开发中,常常会想查看自己对于某个项目的贡献,管理者会查看项目下各成员的贡献,就需要使用到git的命令进行代码提交的统计。 进入到自己的项目文件中,右键点击Git Bash Here 打开后界面 这个统计是以当前所在分支为基准统计的,所以如果是迭代式的往后更迭,统

    2024年02月05日
    浏览(20)
  • 使用git log统计代码行数

    在软件开发过程中,代码行数是一个非常重要的指标,可以用来衡量代码的质量和开发效率。Git是一个流行的版本控制系统,它可以记录和跟踪代码的修改历史。通过使用Git,我们可以很容易地统计代码行数。下面是一些常用的Git命令和解释,用于统计代码行数。 查看当前分

    2023年04月15日
    浏览(16)
  • git使用-关于使用git命令统计整个项目的代码行数、提交者贡献统计等等

    可以使用以下命令来统计整个项目的代码行数: 这个命令会列出当前git仓库中所有的文件,然后将这些文件作为参数传递给 wc -l 命令,用于计算每个文件的行数。最终输出的结果是整个项目的代码行数。 请注意,这个命令只会计算代码文件的行数,不包括注释、空白行和其

    2024年02月09日
    浏览(28)
  • 统计Git项目各成员贡献量(代码行数、提交次数)

    在项目的文件夹中,右键,选择Git Bash Here 会弹出命令行框 使用下面的代码去统计

    2024年02月11日
    浏览(22)
  • 使用Java统计gitlab代码行数

    一、背景:        需要对当前公司所有的项目进行代码行数的统计 二、 可实现方式    1.脚本 :通过git脚本将所有的项目拉下来并然后通过进行代码行数的统计   样例: 将所有的项目进行脚本处理之后便可以得到一张项目名称,代码行数的txt文件,因为以逗号分隔故转换

    2024年02月08日
    浏览(26)
  • 在 GitLab 中自动统计代码行数

    在 GitLab 中,你可以在项目的 \\\"Settings\\\" 页面中找到 \\\"Repository statistics\\\" 选项。点击 \\\"Repository statistics\\\" 后,你就可以看到项目中代码的行数统计信息了。这些信息是通过执行 git blame 命令来获取的,它会跟踪每行代码的最后一次修改者。 你也可以使用 GitLab 的 API 来获取项目的代

    2024年02月11日
    浏览(25)
  • 代码行数统计插件(Intellij IDEA 代码统计插件 Statistic 详细使用教程)

    在项目的开发过程中,你有没有遇到以下的一些场景: 想统计一下整个项目的代码量有多少,比如有多少源代码文件,总体有多少行代码,空行和注释行各有多少? 想统计一下整个项目中各种类型的源代码分别有多少,比如 java和 javascript各有多少? 想统计一下项目下的某个

    2024年02月12日
    浏览(26)
  • x-cmd pkg | tokei - 代码行数统计工具

    tokei 是一个使用 Rust 编写的显示有关代码统计信息的命令行工具,可以分门别类的统计目录内的代码行数。 tokei 具有良好的跨平台性,可以在 Linux、macOS、Windows 等多种平台上安装运行。 使用 x tokei 即可自动下载并使用 在终端运行 eval \\\"$(curl https://get.x-cmd.com)\\\" 即可完成 x 命令

    2024年01月16日
    浏览(24)
  • VSCode常用快捷键(放大/缩小字体、切换全屏、跳转指定行数、返回上一次位置、隐藏 /显示导航、注释代码)

    ——推荐几个常用的快捷键: ——1)“Ctrl+B” = 隐藏 /显示左侧导航 ——2) F11= 切换至全屏模式(禅宗模式)有利于集中注意力开发 ——3)“Ctrl + +” = 放大编辑器页面字体 ——4)“Ctrl + -” =缩小编辑器页面字体 ——5)“Ctrl + /” = 代码注释 ——6)“Ctrl + S\\\" = 文件保存

    2024年02月09日
    浏览(21)
  • 【工具】Github统计代码行数工具推荐(VScode插件、兼容任何平台、不用下载安装包)

    需求: 1)被要求统计代码行数; 2)不想打开Linux,懒得下载Windows版本GitStats; 3)打开了Linux但也不记得find命令行怎么用; 4)打开了Linux,装好了Gitstats但自己没有图形化界面所以无法打开其输出结果; 5)习惯用VScode编程。 其他工具: 1)Linux愿意使用Gitstats的请直接转到

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包