文档章节

项目代码行数统计器,帮助你统计项目一共有多少行代码

abcijkxyz
 abcijkxyz
发布于 2016/07/08 16:28
字数 472
阅读 8
收藏 0

记得以前有位大师说,一个程序员如果没有写满1,000,000行代码,那么不是一个成熟的程序员.  

  1. /** 
  2.  
  3.  * codelinesstatistic 2008-6-20 TangRen 
  4.  
  5.  * Copyright www.tonydev.cn 2008 
  6.  
  7.  */  
  8.   
  9. package cn.javadr.goodlet.codelinesstatistic;  
  10.   
  11.   
  12.   
  13. import java.io.BufferedReader;  
  14.   
  15. import java.io.File;  
  16.   
  17. import java.io.FileReader;  
  18.   
  19. import java.io.IOException;  
  20.   
  21.   
  22.   
  23. /** 
  24.  
  25.  * @author Tang Ren 
  26.  
  27.  * @email : <a href="mailto:tangren1206@163.com">tangren1206@163.com</a> 
  28.  
  29.  *  
  30.  
  31.  * 代码行数统计器 
  32.  
  33.  */  
  34.   
  35. public class CodeLinesStatistic {  
  36.   
  37.   
  38.   
  39.     private static long sums = 0;  
  40.   
  41.   
  42.   
  43.     private static String suffixs[];  
  44.   
  45.   
  46.   
  47.     private static String target;  
  48.   
  49.   
  50.   
  51.     /** buffer flush 的最大值 * */  
  52.   
  53.     private static int FLUSH_FLAG = 1024 * 64;  
  54.   
  55.   
  56.   
  57.     private static StringBuffer statistics = new StringBuffer();  
  58.   
  59.   
  60.   
  61.     /** 
  62.  
  63.      * @param args 
  64.  
  65.      */  
  66.   
  67.     public static void main(String... args) throws IOException {  
  68.   
  69.         // 这里模拟命令行下的参数进行测试   
  70.   
  71.         args = new String[] { "F:/Dev/alisoft_space/ExtSysDataImportTask"// 这里是项目的根目录   
  72.   
  73.                 "java""xml""properties" }; // 这里是统计文件的后缀名   
  74.   
  75.   
  76.   
  77.         long startTimes = System.currentTimeMillis();  
  78.   
  79.         if (args.length > 1)  
  80.   
  81.             suffixs = new String[args.length - 1];  
  82.   
  83.         else {  
  84.   
  85.             System.out  
  86.   
  87.                     .println("As that : targetLocation , fileSuffix , fileSuffix . . .");  
  88.   
  89.             return;  
  90.   
  91.         }  
  92.   
  93.         for (int i = 0; i < args.length; i++) {  
  94.   
  95.             if (i == 0) {  
  96.   
  97.                 target = args[i];  
  98.   
  99.             } else {  
  100.   
  101.                 suffixs[i - 1] = args[i];  
  102.   
  103.             }  
  104.   
  105.         }  
  106.   
  107.         File targetFile = new File(target);  
  108.   
  109.         if (targetFile.exists()) {  
  110.   
  111.             statistic(targetFile);  
  112.   
  113.             System.out.print(statistics.toString());  
  114.   
  115.             System.out.println("All completement. U write [" + sums  
  116.   
  117.                     + "] lines code. did great job!");  
  118.   
  119.         } else {  
  120.   
  121.             System.out.println("File or Dir not exist : " + target);  
  122.   
  123.         }  
  124.   
  125.         System.out.println("Total times "  
  126.   
  127.                 + (System.currentTimeMillis() - startTimes) + " ms");  
  128.   
  129.     }  
  130.   
  131.   
  132.   
  133.     /** 
  134.  
  135.      * 深度优先,统计文件行数 
  136.  
  137.      *  
  138.  
  139.      * @param file 
  140.  
  141.      * @throws IOException 
  142.  
  143.      */  
  144.   
  145.     private static void statistic(File file) throws IOException {  
  146.   
  147.         if (file.isDirectory()) {  
  148.   
  149.             File[] files = file.listFiles();  
  150.   
  151.             for (int i = 0; i < files.length; i++) {  
  152.   
  153.                 statistic(files[i]);  
  154.   
  155.             }  
  156.   
  157.         }  
  158.   
  159.         if (file.isFile()) {  
  160.   
  161.             if (isMatchSuffixs(file)) {  
  162.   
  163.                 sums += countFileTextLines(file);  
  164.   
  165.             }  
  166.   
  167.         }  
  168.   
  169.     }  
  170.   
  171.   
  172.   
  173.     /** 
  174.  
  175.      * 检查文件是否是制定后缀的文件 
  176.  
  177.      *  
  178.  
  179.      * @param file 
  180.  
  181.      * @return 
  182.  
  183.      */  
  184.   
  185.     private static boolean isMatchSuffixs(File file) {  
  186.   
  187.         String fileName = file.getName();  
  188.   
  189.         if (fileName.indexOf(".") != -1) {  
  190.   
  191.             String extName = fileName.substring(fileName.indexOf(".") + 1);  
  192.   
  193.             for (int i = 0; i < suffixs.length; i++) {  
  194.   
  195.                 if (suffixs[i].equals(extName)) {  
  196.   
  197.                     return true;  
  198.   
  199.                 }  
  200.   
  201.             }  
  202.   
  203.         }  
  204.   
  205.         return false;  
  206.   
  207.     }  
  208.   
  209.   
  210.   
  211.     /** 
  212.  
  213.      * 统计文件行数 
  214.  
  215.      *  
  216.  
  217.      * @param file 
  218.  
  219.      * @return 
  220.  
  221.      * @throws IOException 
  222.  
  223.      */  
  224.   
  225.     private static long countFileTextLines(File file) throws IOException {  
  226.   
  227.         long result = 0;  
  228.   
  229.         if (statistics.length() > FLUSH_FLAG) {  
  230.   
  231.             System.out.print(statistics.toString());  
  232.   
  233.             statistics = new StringBuffer();  
  234.   
  235.         }  
  236.   
  237.         statistics.append("Counting in ").append(file.getAbsolutePath());  
  238.   
  239.         BufferedReader br = new BufferedReader(new FileReader(file));  
  240.   
  241.         while (br.readLine() != null)  
  242.   
  243.             result++;  
  244.   
  245.         br.close();  
  246.   
  247.         statistics.append("   -  ").append(result).append("/n");  
  248.   
  249.         return result;  
  250.   
  251.     }  
  252.   
  253. }  

刚刚断网, 无聊间写了一个统计一个项目中代码行数的小应用.

因为记得以前有位大师说, 没写过超过1,000,000行代码的程序员不是经验丰富的程序员.

本文转载自:http://blog.csdn.net/yuwenruli/article/details/6910223

共有 人打赏支持
abcijkxyz
粉丝 64
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
cloc:计算不同编程语言源代码的行数

作为一个开发人员,你可能需要不时地向你的领导或者同事分享你目前的工作与代码开发进展,抑或你的领导想对代码进行全方位的分析。这时,你就需要用到一些代码统计的工具,我知道其中一个是 ...

作者: Sk
10/15
0
0
Android数据库高手秘籍(八)——使用LitePal的聚合函数

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40614197 在上一篇文章当中,我们已经把LitePal查询操作的所有用法都学习完了,很显然,LitePal帮我们提供了非常强大的查...

sinyu890807
2014/12/04
0
0
5个衡量软件质量的标准(可自动化)

1. Sourc Lines of Code (SLOC) 统计代码行数可能是最简单的方法。它能体现软件的规模,为项目的发展和计划提供一些数据支撑。例如,我们每个月统计一次代码的行数,我们就能大体知道项目的发...

虫虫
2012/10/09
5.1K
6
关于OpenERP的一些技术数字

转载自http://www.osbzr.com/336 ohloh.net 是个好网站,上面有很多开源项目的统计信息。 关于OpenERP,它记录了以下有趣的数字。 代码成熟,管理规范 OpenERP的第一行代码在2006年提交。虽已...

WangJeff
2013/04/13
824
3
关于BUG率的计算和它的实际意义的思考

问题1:bug率有什么作用? 用处有很多,需要具体情况具体分析,不过主要作用一般是来评价工作产品的质量。如果bug率较高,说明系统质量较差,需要大量的返工。项目经理就需要做好缺陷分析(缺...

青春的小奋斗
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

七牛qshell工具 批量删除操作

qshell 下载地址&文档(http://developer.qiniu.com/code/v6/tool/qshell.html) 这里我们演示的是windows下的操作,将下载的工具改名为:qshell.exe 然后将文件的路径添加到PATH qshell accou...

koothon
22分钟前
1
0
Fastjson-fastjson中$ref对象重复引用问题

import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;/** * fastjson中$ref对象......

小黄狗
28分钟前
1
0
mybatis一级缓存

mybatis执行查询的流程,最终都是通过动态代理进入到MapperProxy的invoke方法 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { try......

wuyiyi
29分钟前
3
0
安装weblogic wls1033_generic.jar 遇见的坑

接别人的烂摊子,weblogic部署没部署成功不部署了 让我远程给别人部署weblogic 11g 部署完成启动域的时候启动不了报错如下 Unrecognized option: -jrockit Error: Could not create the Ja...

雁南飞丶
29分钟前
1
0
通过7个python函数理解区块链

我想对于那里的很多人来说,区块链就是这种现象,很难不让你头脑发热。我开始观看视频和阅读文章,但对我个人而言,直到我编写自己的简单区块链,我才真正理解它是什么以及它的潜在应用价值。...

笔阁
30分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部