在新公司工作将近一年了,一直独自一人负责服务端集群的运维和代码的编写。不知不觉从一个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"字符串的工程,运行结果如下图所示:
一 年左右的时间,竟然写了两百多万行。我自己都被自己震惊了……整天特别累,虽然写了很多代码,但是慢慢的我意识到,从生手到熟练后,更重要的是代码的质量 和算法的突破。以后将推掉这些基础性的工作,腾出更多的时间去多读书,研究研究理论性的东西。不能一直都在写一样的代码。
原文:http://www.cnblogs.com/cliyun/p/5765825.html