`
fulerbakesi
  • 浏览: 564201 次
文章分类
社区版块
存档分类
最新评论

利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计)

 
阅读更多

这是一个利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计)的程序。可以在特定的指定的文件目录下寻找指定的文件,在下面程序里主要是寻找java文件并进行数量统计和代码统计(代码行、空行、注释行)。至于删除那些class文件主要是因为我统计的是我下载的JDK的源码,里面的class文件不知道什么时候产生的,手动删除实在麻烦。在我的机器上的结果是:StatisticalJavaFiles:7070
CodeLine:894658
ComentLine:901352
WhiteLine :238595

呵呵,Sun公司发布的Java源码有90万行,不算多。估计没公布的比公布的还多。而且统计出来的结果中注释的语句比代码行还多。这也充分说明了注释得重要性。

  1. /*
  2. *StatisticalCodes.java2008-10-15
  3. *Thisprogramwaswriteforfindoutsomekindsof
  4. *filethatwespecify.
  5. */
  6. importjava.io.BufferedReader;
  7. importjava.io.File;
  8. importjava.io.FileNotFoundException;
  9. importjava.io.FileReader;
  10. importjava.io.IOException;
  11. /**
  12. *@authorSancho_lai
  13. */
  14. publicclassStatisticalCodes{
  15. //codeslinecount
  16. privatestaticlongcodeLines=0;
  17. //commentlinecount
  18. privatestaticlongcommentLines=0;
  19. //whitelinecount
  20. privatestaticlongwhiteLines=0;
  21. //numberofjavafileswasfound
  22. privatestaticlongstatisticalJavaFiles=0;
  23. //inputadirectorythatyouwant,butitwillcostaNullPointExceptionwhenyouinputa<rootdirectory>
  24. privatestaticStringpath="D://jdkSrc";
  25. publicstaticvoidmain(String[]args){
  26. Filefile=newFile(path);
  27. findSpecifiedDoc(file);
  28. System.out.println("StatisticalJavaFiles:"+statisticalJavaFiles);
  29. System.out.println("CodeLine:"+codeLines);
  30. System.out.println("ComentLine:"+commentLines);
  31. System.out.println("WhiteLine:"+whiteLines);
  32. }
  33. /**
  34. *findallthefilesthatfitfortheRegularExpressionyouspecify
  35. *andthendealwithitandcountthelinesanddeletetheclassfiles
  36. *youcanextendityouwanttobe
  37. */
  38. privatestaticvoidfindSpecifiedDoc(Filefile){
  39. File[]fileArray=file.listFiles();
  40. for(Filechild:fileArray){
  41. if(child.isDirectory()){//whenchildwasadirectoryrecursivelycall<findSpecifiedDoc>untilgetjavafile
  42. findSpecifiedDoc(child);
  43. }elseif(child.getName().matches(".*//.java$")){//whenthe<child>wasajavafile,countthelines
  44. parser(child);
  45. statisticalJavaFiles++;
  46. }elseif(child.getName().matches(".*//.class$")){//whenthe<child>wasaclassfile,deleteit
  47. deleteClassFile(child);
  48. }
  49. }
  50. }
  51. /**
  52. *deletetheclasstypefile
  53. *@paramchild
  54. */
  55. privatestaticvoiddeleteClassFile(Filechild){
  56. child.delete();
  57. }
  58. /**
  59. *parserthejavafilecountthecodeLines...
  60. *usingtheregularexpressionforjudging
  61. *@paramchild
  62. */
  63. privatestaticvoidparser(Filechild){
  64. BufferedReaderbr=null;
  65. booleancomment=false;
  66. Stringline="";
  67. try{
  68. br=newBufferedReader(newFileReader(child));
  69. while((line=br.readLine())!=null){
  70. line=line.trim();
  71. if(line.matches("^[//s&&[^//n]]*$")){//
  72. whiteLines++;
  73. }elseif(line.startsWith("/*")&&!line.endsWith("*/")){//commentlinesstartwith/*
  74. commentLines++;
  75. comment=true;
  76. }elseif(line.startsWith("/*")&&line.endsWith("*/")){
  77. commentLines++;
  78. }elseif(true==comment){
  79. commentLines++;
  80. if(line.endsWith("*/")){
  81. comment=false;
  82. }
  83. }elseif(line.startsWith("//")){
  84. commentLines++;
  85. }else{//itsupposethatthejavafilesjustcontainthreekindsoflines
  86. codeLines++;
  87. }
  88. }
  89. }catch(FileNotFoundExceptione){
  90. e.printStackTrace();
  91. }catch(IOExceptione){
  92. e.printStackTrace();
  93. }finally{
  94. if(br!=null){
  95. try{
  96. br.close();
  97. br=null;
  98. }catch(IOExceptione){
  99. e.printStackTrace();
  100. }
  101. }
  102. }
  103. }
  104. }
分享到:
评论

相关推荐

    Java正则表达式提取字符的方法实例

    正好遇到一个需求需要将字符串中特定的字符全部提取出来,这个如果是按常规的字符串处理的话非常的繁琐。于是想到用正则表达式来完成。项目需求是这样的:需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A...

    JavaScript完全自学宝典 源代码

    1.本书1~21章所附代码的运行环境 操作系统:Windows 2003、Windows XP Professional,或者Windows 2000 开发环境:UltraEdit12.10a、eclipse-jee-europa Web浏览器:Microsoft Internet Explorer 6.0及以上版本 ...

    JavaScript基础教程第8版

    书中从JavaScript语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式、用户事件和cookie,并在上一版的基础上新增了两章,讲述jQuery框架的基础知识。本书不仅介绍了基础知识和使用方法,也深入探讨...

    javaSE代码实例

    13.6.3 利用正则式对字符串进行分析 268 13.7 小结 269 第14章 集合框架——强大的对象管理器 270 14.1 Object类——所有类的超类 270 14.1.1 toString方法的重写 270 14.1.2 equals方法的意义 271 ...

    xheditor-1.1.14

    方法2:利用xhEditor提供的jQuery插件接口来实现对特定textarea的初始化和传递参数,例: $('#elm1').xheditor(); 或者 $('#elm1').xheditor({tools:'mini'}); 特别说明:两种初始化方法只能选择其中一种使用,如果...

    kotlin-jmh-benchmarks

    Kotlin2JVM 编译器的基准测试 ====================== ...其中是匹配基准测试全名的正则表达式(格式为Class.method )。 要查看完整列表,请转到 可用的基准 InliningTest在Kotlin模块可用。 它证明即

    Spring.3.x企业应用开发实战(完整版).part2

    6.4.4 静态正则表达式方法匹配切面 6.4.5 动态切面 6.4.6 流程切面 6.4.7 复合切点切面 6.4.8 引介切面 6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator ...

    Spring3.x企业应用开发实战(完整版) part1

    6.4.4 静态正则表达式方法匹配切面 6.4.5 动态切面 6.4.6 流程切面 6.4.7 复合切点切面 6.4.8 引介切面 6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod...

    Scala程序设计(第2版)

    4.8 正则表达式的匹配 103 4.9 再谈case语句的变量绑定 104 4.10 再谈类型匹配 104 4.11 封闭继承层级与全覆盖匹配 105 4.12 模式匹配的其他用法 107 4.13 总结关于模式匹配的评价 111 4.14 本章...

Global site tag (gtag.js) - Google Analytics