利用正则表达式获取特定文件(如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
  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()){//whenchildwasadirectoryrecursivelycalluntilgetjavafile
  42. findSpecifiedDoc(child);
  43. }elseif(child.getName().matches(".*//.java$")){//whenthewasajavafile,countthelines
  44. parser(child);
  45. statisticalJavaFiles++;
  46. }elseif(child.getName().matches(".*//.class$")){//whenthewasaclassfile,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 class)并对其进行处理(如代码统计))