这是一个利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计)的程序。可以在特定的指定的文件目录下寻找指定的文件,在下面程序里主要是寻找java文件并进行数量统计和代码统计(代码行、空行、注释行)。至于删除那些class文件主要是因为我统计的是我下载的JDK的源码,里面的class文件不知道什么时候产生的,手动删除实在麻烦。在我的机器上的结果是:StatisticalJavaFiles:7070
CodeLine:894658
ComentLine:901352
WhiteLine :238595
呵呵,Sun公司发布的Java源码有90万行,不算多。估计没公布的比公布的还多。而且统计出来的结果中注释的语句比代码行还多。这也充分说明了注释得重要性。
- /*
- *StatisticalCodes.java2008-10-15
- *Thisprogramwaswriteforfindoutsomekindsof
- *filethatwespecify.
- */
- importjava.io.BufferedReader;
- importjava.io.File;
- importjava.io.FileNotFoundException;
- importjava.io.FileReader;
- importjava.io.IOException;
- /**
- *@authorSancho_lai
- */
- publicclassStatisticalCodes{
- //codeslinecount
- privatestaticlongcodeLines=0;
- //commentlinecount
- privatestaticlongcommentLines=0;
- //whitelinecount
- privatestaticlongwhiteLines=0;
- //numberofjavafileswasfound
- privatestaticlongstatisticalJavaFiles=0;
- //inputadirectorythatyouwant,butitwillcostaNullPointExceptionwhenyouinputa<rootdirectory>
- privatestaticStringpath="D://jdkSrc";
- publicstaticvoidmain(String[]args){
- Filefile=newFile(path);
- findSpecifiedDoc(file);
- System.out.println("StatisticalJavaFiles:"+statisticalJavaFiles);
- System.out.println("CodeLine:"+codeLines);
- System.out.println("ComentLine:"+commentLines);
- System.out.println("WhiteLine:"+whiteLines);
- }
- /**
- *findallthefilesthatfitfortheRegularExpressionyouspecify
- *andthendealwithitandcountthelinesanddeletetheclassfiles
- *youcanextendityouwanttobe
- */
- privatestaticvoidfindSpecifiedDoc(Filefile){
- File[]fileArray=file.listFiles();
- for(Filechild:fileArray){
- if(child.isDirectory()){//whenchildwasadirectoryrecursivelycall<findSpecifiedDoc>untilgetjavafile
- findSpecifiedDoc(child);
- }elseif(child.getName().matches(".*//.java$")){//whenthe<child>wasajavafile,countthelines
- parser(child);
- statisticalJavaFiles++;
- }elseif(child.getName().matches(".*//.class$")){//whenthe<child>wasaclassfile,deleteit
- deleteClassFile(child);
- }
- }
- }
- /**
- *deletetheclasstypefile
- *@paramchild
- */
- privatestaticvoiddeleteClassFile(Filechild){
- child.delete();
- }
- /**
- *parserthejavafilecountthecodeLines...
- *usingtheregularexpressionforjudging
- *@paramchild
- */
- privatestaticvoidparser(Filechild){
- BufferedReaderbr=null;
- booleancomment=false;
- Stringline="";
- try{
- br=newBufferedReader(newFileReader(child));
- while((line=br.readLine())!=null){
- line=line.trim();
- if(line.matches("^[//s&&[^//n]]*$")){//
- whiteLines++;
- }elseif(line.startsWith("/*")&&!line.endsWith("*/")){//commentlinesstartwith/*
- commentLines++;
- comment=true;
- }elseif(line.startsWith("/*")&&line.endsWith("*/")){
- commentLines++;
- }elseif(true==comment){
- commentLines++;
- if(line.endsWith("*/")){
- comment=false;
- }
- }elseif(line.startsWith("//")){
- commentLines++;
- }else{//itsupposethatthejavafilesjustcontainthreekindsoflines
- codeLines++;
- }
- }
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- if(br!=null){
- try{
- br.close();
- br=null;
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }
- }