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

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

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

  1. /*
  2.  * StatisticalCodes.java 2008-10-15
  3.  * This program was write for find out some kinds of 
  4.  * file that we specify.
  5.  */
  6. import java.io.BufferedReader;
  7. import java.io.File;
  8. import java.io.FileNotFoundException;
  9. import java.io.FileReader;
  10. import java.io.IOException;
  11. /**
  12.  * @author Sancho_lai
  13.  */
  14. public class StatisticalCodes  {
  15.     
  16.     //codes line count
  17.     private static long codeLines  = 0;
  18.     //comment line count
  19.     private static long commentLines = 0;
  20.     //white line count
  21.     private static long whiteLines   = 0;
  22.     //number of java files was found
  23.     private static long statisticalJavaFiles = 0
  24.     
  25.     //input a directory that you want,but it will cost a NullPointException when you input a 
  26.     private static String path = "D://jdkSrc";
  27.     
  28.     public static void main(String[] args) {
  29.         File file = new File(path);
  30.         
  31.         findSpecifiedDoc(file);
  32.         
  33.         System.out.println("StatisticalJavaFiles:" + statisticalJavaFiles);
  34.         System.out.println("CodeLine:" + codeLines);
  35.         System.out.println("ComentLine:" + commentLines);
  36.         System.out.println("WhiteLine :" + whiteLines);
  37.         
  38.     }
  39.     /**
  40.      * find all the files that fit for the Regular Expression you specify
  41.      * and then deal with it and count the lines and delete the class files
  42.      * you can extend it you want to be
  43.      */
  44.     private static void findSpecifiedDoc(File file) {
  45.         File[] fileArray = file.listFiles();
  46.         for(File child:fileArray) {
  47.             if(child.isDirectory()) { //when child was a directory recursively call  until get java file 
  48.                 findSpecifiedDoc(child);
  49.             }else if(child.getName().matches(".*//.java$")) { //when the  was a java file ,count the lines
  50.                 parser(child);
  51.                 statisticalJavaFiles++;
  52.             }else if(child.getName().matches(".*//.class$")){ //when the  was a class file , delete it
  53.                 deleteClassFile(child);
  54.             }
  55.         } 
  56.     }
  57.     /**
  58.      * delete the class type file
  59.      * @param child
  60.      */
  61.     private static void deleteClassFile(File child) {
  62.         child.delete();
  63.     }
  64.     /**
  65.      * parser the java file count the codeLines ...
  66.      * using the regular expression for judging
  67.      * @param child
  68.      */
  69.     private static void parser(File child) {
  70.         BufferedReader br = null;
  71.         boolean comment = false;
  72.         String line = "";
  73.         try {
  74.             br = new BufferedReader(new FileReader(child));
  75.             while((line = br.readLine()) != null) {
  76.                 line = line.trim();
  77.                 if(line.matches("^[//s&&[^//n]]*$")) { //
  78.                     whiteLines ++;
  79.                 } else if (line.startsWith("/*") && !line.endsWith("*/")) {//comment lines start with /* 
  80.                     commentLines ++;
  81.                     comment = true
  82.                 } else if (line.startsWith("/*") && line.endsWith("*/")) {
  83.                     commentLines ++;
  84.                 } else if (true == comment) {
  85.                     commentLines ++;
  86.                     if(line.endsWith("*/")) {
  87.                         comment = false;
  88.                     }
  89.                 } else if (line.startsWith("//")) {
  90.                     commentLines ++;
  91.                 } else { //it suppose that the java files just contain three kinds of lines
  92.                     codeLines ++;
  93.                 }
  94.             }
  95.         } catch (FileNotFoundException e) {
  96.             e.printStackTrace();
  97.         } catch (IOException e) {
  98.             e.printStackTrace();
  99.         } finally {
  100.             if(br != null) {
  101.             try {
  102.                 br.close();
  103.                 br = null;
  104.             } catch (IOException e) {
  105.                 e.printStackTrace();
  106.             }
  107.           }
  108.         }
  109.     }   
  110. }

你可能感兴趣的:(利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计))