package test.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class SumJavaCode { private long normalLines = 0; // 空行 private long commentLines = 0; // 注释行 private long whiteLines = 0; // 代码行 public static void main(String[] args) { System.out.println(args[0]); SumJavaCode sjc = new SumJavaCode(); File f = new File(args[0] + "/firefly-project/firefly-common"); System.out.println(f.getName()); sjc.treeFile(f); System.out.println("空行:" + sjc.getWhiteLines()); System.out.println("注释行:" + sjc.getCommentLines()); System.out.println("代码行:" + sjc.getNormalLines()); sjc = new SumJavaCode(); f = new File(args[0] + "/firefly-project/firefly"); System.out.println(f.getName()); sjc.treeFile(f); System.out.println("空行:" + sjc.getWhiteLines()); System.out.println("注释行:" + sjc.getCommentLines()); System.out.println("代码行:" + sjc.getNormalLines()); sjc = new SumJavaCode(); f = new File(args[0] + "/firefly-project/firefly-nettool"); System.out.println(f.getName()); sjc.treeFile(f); System.out.println("空行:" + sjc.getWhiteLines()); System.out.println("注释行:" + sjc.getCommentLines()); System.out.println("代码行:" + sjc.getNormalLines()); } /** * 查找出一个目录下所有的.java文件 * * @param f * 要查找的目录 */ private void treeFile(File f) { f.listFiles(new FileFilter() { @Override public boolean accept(File file) { if (!file.isDirectory()) { if (file.getName().matches(".*\\.java$")) { sumCode(file); } } else { treeFile(file); } return false; } }); } /** * 计算一个.java文件中的代码行,空行,注释行 * * @param file * * 要计算的.java文件 */ private void sumCode(File file) { BufferedReader br = null; boolean comment = false; try { br = new BufferedReader(new FileReader(file)); String line = ""; try { while ((line = br.readLine()) != null) { line = line.trim(); if (line.matches("^[\\s&&[^\\n]]*$")) { whiteLines++; } else if (line.startsWith("/*") && !line.endsWith("*/")) { commentLines++; comment = true; } else if (true == comment) { commentLines++; if (line.endsWith("*/")) { comment = false; } } else if (line.startsWith("//")) { commentLines++; } else { normalLines++; } } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } } public long getNormalLines() { return normalLines; } public long getCommentLines() { return commentLines; } public long getWhiteLines() { return whiteLines; } }