编写Java脚本统计工程代码总行数
在新公司工作将近一年了,一直独自一人负责服务端集群的运维和代码的编写。不知不觉从一个Project发展到了七八个Project。 看着越来越多的代码,今天突然想统计一下一共写了多少代码。【这里只统计完全由自己编写的代码,因为项目是基于Springboot的,所以直接统计 src目录下所有文件的行数即可】
首先,编写几个工具类。
FolderFind.java
import java.io.File;
import java.util.ArrayList;
import java.util.List; /**
* Created by 杨小龙 on 2016-08-05.
* 邮箱:1172875805@qq.com
*/
public class FolderFind { //列出工程文件内的其他项目,使用match参数过滤工程名
public static List<String> listFolder(String path,String match){
File file = new File(path);
List<String> re = new ArrayList<String>();
if(file.isDirectory()){
String[] list = file.list();
if(list!=null){
for(String item:list){
if (item.contains(match)){
re.add(path+item);
}
}
}
}
return re;
} //列出某一个目录下,所有的文件。
public static List<String> listFile(String path){
File file = new File(path);
List<String> re = new ArrayList<String>(); if(file.isDirectory()){
File filelist[] = file.listFiles(); if(filelist!=null){
for(File item:filelist){
if(item.isDirectory()){
List<String> temp = listFile(item.getPath());
re.addAll(temp);
}else{
re.add(item.getPath());
}
}
}
} return re;
}
}
CountLine.java
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader; /**
* Created by 杨小龙 on 2016-08-05.
* 邮箱:1172875805@qq.com
*/
public class CountLine { public static int countFileLineNum(String path){
File file = new File(path);
if(file.isFile()){
try{
FileReader in = new FileReader(path);
LineNumberReader reader = new LineNumberReader(in);
//int num = reader.getLineNumber();
String strLine = null;
int num = 0;
while ((strLine = reader.readLine()) != null) {
num++;
}
reader.close();
in.close();
return num;
}catch (Exception e){
e.printStackTrace();
}
}
return 0;
}
}
Main函数所在文件:Tongji.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by 杨小龙 on 2016-08-05.
* 邮箱:1172875805@qq.com
*/
public class Tongji { public static void main(String[] args) {
List<String> fileList = FolderFind.listFolder("../","yoko");
Map<String,Integer> re = new HashMap<String, Integer>();
int all=0; for(String item:fileList){
List<String> files = new ArrayList<String>();
if(item.contains("yoko-config") || item.contains("config-data")){
files = FolderFind.listFile(item+"\\");
}else{
files = FolderFind.listFile(item+"\\src\\");
} int num=0;
for(String item2:files){
// System.out.println(item2);
num = num + CountLine.countFileLineNum(item2);
}
all = all + num;
re.put(item,num);
System.out.println("工程【"+item+"】###"+num+"行");
}
System.out.println("总行数:"+all);
}
}
运行后,该脚本统计了我ItellIJ工程目录下,携带"yoko"字符串的工程,运行结果如下图所示:

一 年左右的时间,竟然写了两百多万行。我自己都被自己震惊了……整天特别累,虽然写了很多代码,但是慢慢的我意识到,从生手到熟练后,更重要的是代码的质量 和算法的突破。以后将推掉这些基础性的工作,腾出更多的时间去多读书,研究研究理论性的东西。不能一直都在写一样的代码。
相似文章:
编写Java脚本统计工程代码总行数的更多相关文章
- 我的Android进阶之旅------>Android Studio使用statistics插件统计项目代码总行数
今天公司说要统计一下项目总共了多少行代码,于是上网看了一下使用statistic插件可以统计代码总行数,下面给大家分享一下 ! 1.下载[statistic]插件 首先当然要把名为[statistic ...
- vs2010统计项目代码总行数
按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 找到最后一行就是结果
- VS 2017 统计项目代码总行数
编辑 → 查找和替换 → 在文件中的查找,打开查找窗口 填入正则表达式 ^b*[^:b#/]+.*$ 查找范围选“整个解决方案”,勾选上“使用正则表达式” 如果要限制文件类型,就填上要查找的文件类型 ...
- 基于Gitlab统计代码行--统计所有仓库、所有提交人的代码总行数(新增加-删除)
公司绩效考核要求,统计GITLAB仓库所有人提示有效代码行业 脚本1: 统计所有仓库.所有提交人的代码总行数(新增加-删除) 脚本2: 统计所有仓库.所有提交人的代码提交汇总与删除汇总 脚本3: 统计 ...
- python统计代码总行数(代码行、空行、注释行)
我们在工作或学习代码的过程中,经常会想知道自己写了多少行代码,今天在项目环境写了个脚本统计了项目代码的数量. 功能: 1.统计代码总行数 2.统计空行数 3.统计注释行数 # coding=utf-8 ...
- Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)
要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释 ...
- iOS 统计App 的代码总行数
打开Terminal,cd 到项目的根目录下,输入以下命令 find . -name "*.m" -or -name "*.mm" -or -name &quo ...
- 使用PYTHON统计项目代码行数
目录 一 使用PYTHON统计项目代码行数 二 应用实例 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 使用PYTHON统计项目代码行数 遇到一个非常小的需求:统计一个项目里头的各类源代码 ...
- Python-统计svn代码总行数
1 #!/bin/bash/python 2 # -*-coding:utf-8-*- 3 #svn统计url代码行数脚本,过滤空行,不过滤注释. 4 5 import subprocess,os,s ...
随机推荐
- C# .NET想要另存一个项目,sln文件丢了怎么办
如下图所示,我想要另存一个工程,把 V4.4整个的项目另存为V4.5,我可以把解决方案文件(.sln)改名字,但是我没法把文件夹改名字,改了打开sln就说找不到. 很简单的一个思路是反正sln是多 ...
- 【LeetCode刷题Java版】Reverse Words in a String
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...
- Swift-AES之加密解密
什么是AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代 ...
- matlab采用mex编译多个cpp文件
最近在看matlab code时,由于本人使用的是64系统,而code中的mex文件时在32位系统上编译的,所以需要重新自己编译maxflowmex.cpp,但是直接mex maxflowmex.cp ...
- 一句powershell调用mimikatz抓密码
mimikatz神器大家都知道吧,可以抓取系统内的明文密码,但是平时我们测试的时候需要把mimikatz的几个文件上传到目标系统上面,然后再手工执行几个命令才能搞定,今天无意访问一个大神的博客,发现其 ...
- 符号修饰与函数签名、extern “C”(转载)
转自:http://www.cnblogs.com/monotone/archive/2012/11/16/2773772.html 参考资料: <程序员的自我修养>3.5.3以及3.5. ...
- bzoj 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛【bfs】
满脑子dp简直魔性 模拟题意bfs转移即可 #include<iostream> #include<cstdio> #include<queue> using na ...
- bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声【单调栈】
先考虑只能往一边传播,最后正反两边就行 一向右传播为例,一头牛能听到的嚎叫是他左边的牛中与高度严格小于他并且和他之间没有更高的牛,用单调递减的栈维护即可 #include<iostream> ...
- 17年day4
/* 嗯,又一天 上午考试,睡了两觉(我不会把我第二觉流了口水这件事说出去) 状态比较玄学,上午困得要死,下午无比精神(感觉NOIP要完). 复习了概率期望.发现以前做过的题还是不会做,好像连印象都比 ...
- RandomAccessFile使用场景及总结
大家在学到Java中IO流的时候学到了各种流,对文件的各种操作.但是唯独可能对RandomAccessFile对象不会去过多的研究,那么这个到底有什么用呢? RandomAccessFile的唯一父类 ...