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
这个命令会打印出文件和对应的行数。
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的注释,且结尾不是 --> 时,表示是多行注释,设置标记为trueif (!内容.endsWith("-->")) flag = true;}else {代码行数++;单个文件代码行数++;}}}}catch (Exception e){e.printStackTrace();}finally {try {br.close();} catch (IOException e) {e.printStackTrace();}}return 单个文件代码行数;}
}
统计结果
最后的总行数,是和用Git统计的总行数对得上的。
Git统计代码行数;Java实现统计代码行数,忽略空行、注释行相关推荐
- html中的保存功能代码怎么写,java保存html代码怎么写
java保存html代码怎么写 [2021-01-31 03:29:24] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...
- java斗地主代码_基于java实现斗地主代码实例解析
斗地主 规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克 ...
- java大文件首行追加,java中实现,在大文件的第一行添加内容
需求描述: 最近在写一个定时任务,发送多次请求到接口,接口返回报文写入到一个文件中,文件要求格式第一行为总数.这个总数只能在最后的时候才能知道, 这就相当于提出了一个要求:在文件的第一行添加内容,以前 ...
- java游戏倒计时代码怎么用,Java实现倒计时代码
import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask ...
- 代码洁癖系列(四):可忽略的注释
刚开始学编程的时候,老师就告诉我们,注释很重要,但是一直到现在,也没有人真正告诉过我要怎么写注释.还有很多人甚至干脆不写注释.所以今天想聊一下到底如何写注释. 提到注释就让我想起一个段子:两个程序员去 ...
- Python编程 统计Java源文件代码行数,注释行数,空白行数
每次学习新的语言,就想重新实现一遍做过的课设=,= 这里实现的是"综合性实验 Java源代码分析程序"的第三部分 第二部分见:[Python编程]统计目录下Java源文件的关键字出 ...
- java 统计文本行数_统计文本文件的行数,单词书,字节数
[java]代码库import java.io.*; /** * 统计文本文件的行数,单词书,字节数 */ class WordCount { public static int words = 1; ...
- java个人介绍代码_个人项目WC(Java)
1.WC项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词 ...
- java判断一个文件有多少行_Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)...
要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释 ...
最新文章
- 技术流 | 手把手教你用Python设计一个命令行界面
- 以计算机为主题的英语作文范例,myfamily英语作文范文示例
- vue foreach用法_两年前端er,JS和Vue,面试被问了哪些问题呢?有点简单啊
- 看动画学算法之:doublyLinkedList
- protected访问权限_复习封装与访问控制
- OJ1006: 求等差数列的和
- java面试要点---ibatiS框架的使用方法介绍---随时更新
- js拼的onclick调用方法需要注意的地方 之二
- android+大富翁+局域网,【图片】大富翁6局域网(LAN)多人联机教程(求精)_大富翁吧_百度贴吧...
- graphics2d 乱码 java_java Graphics2D绘制文字并居中并解决服务器乱码问题
- python画50个图-python绘制多个子图的实例
- 微信小程序云开发教程-JavaScript入门(3)-数据类型
- java连接oracle sid_jdbc连接数据库使用sid和service_name的区别
- 如何用好项目管理工具
- 基于matlab的语音信号处理
- 合作开发过程产生的专利_合作开发合同和技术联营合同的区别及
- 最佳Icon图标库推荐,收藏等于学会
- Pivotal任命Lionel Lim为Pivotal公司副总裁兼亚太区常务董事
- github在线简历
- End-to-end/hand-crafted的含义(深度学习)