import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class CodeCount { public static long normalLines; //统计正常行 public static long commentLines; //统计注释行 public static long whiteLines; //统计空白行 public static void main(String[] args) { File f = new File("D://temp"); File[] codeFiles = f.listFiles(); for(File childFile : codeFiles) { if(childFile.getName().matches(".*//.java$")) { parse(childFile); } } System.out.println("normalLines:" + normalLines); System.out.println("commentLines:" + commentLines); System.out.println("whiteLines:" + whiteLines); } private static void parse(File childFile) { BufferedReader buf = null; Boolean comment = false; try { buf = new BufferedReader(new FileReader(childFile)); String line; while((line=buf.readLine()) != null) { line = line.trim(); if(line.matches("^[//s&&[^//n]]*$")) { whiteLines++; }else if(line.startsWith("//")) { commentLines++; }else if(line.startsWith("/*") && line.endsWith("*/")) { commentLines++; }else if(line.startsWith("/*") && !line.endsWith("*/")) { commentLines++; comment = true; }else if(true == comment) { commentLines++; if(line.endsWith("*/")) { comment = false; } }else { normalLines++; } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }