这个例子是前面《正则表达式》和《Math、File、Enum常用类》的两个例子中的代码的结合
import java.io.*; public class codeCount2{ static long normalLines=0; static long commentLines=0; static long whiteLines=0; public static void main(String[] args){ int level=1; File f=new File("E:/test3"); System.out.println(f.getName()); showAll(f,level); System.out.println("normalLines:"+normalLines); System.out.println("commentLines:"+commentLines); System.out.println("whiteLines:"+whiteLines); } public static void showAll(File f,int level){ String preStr=""; for(int i=0;i<level;i++){ preStr+=" "; } File[] ff=f.listFiles(); int i; for(i=0;i<ff.length;i++){ System.out.println(preStr+ff[i].getName()); if(ff[i].isDirectory())showAll(ff[i],level+1); if(ff[i].isFile()&&ff[i].getName().matches(".*\\.java$")){ parse(ff[i]); } } } private static void parse(File f){ BufferedReader br=null; boolean comment=false; try{ br=new BufferedReader(new FileReader(f)); String line=""; while((line=br.readLine())!=null){ line=line.trim(); if(line.matches("^[\\s&&[^\\n]]*$")) //readLine()时已经把换行给去掉了,所以查找空行的正则表达式时没有后面的换行匹配了 whiteLines++; else if(line.startsWith("/*")&&!line.endsWith("*/")){ commentLines++; comment=true; }else if(line.startsWith("/*")&&line.endsWith("*/")){ commentLines++; }else if(true==comment){ commentLines++; if(line.endsWith("*/")) comment=false; } else if(line.startsWith("//")){ commentLines++; } else{ normalLines++; } } }catch(Exception e){ System.out.println("出错啦!"); e.printStackTrace(); }finally{ if(br!=null){ try{ br.close(); br=null; }catch(IOException e){e.printStackTrace(); } } } } }