package jqian.util.metric; import java.io.*; /** */ public class LineCounter { public static int countProjectLines(File projectRoot){ int lineCount = 0; if(!projectRoot.isDirectory()){ if(isJavaFile(projectRoot.getName())) return countFileLine(projectRoot); else return 0; } //a directory File[] contents = projectRoot.listFiles(); int size = contents.length; for(int i=0;i<size;i++){ File item = contents[i]; if(item.isDirectory()){ lineCount += countProjectLines(item); } else if(isJavaFile(item.getName())){ lineCount += countFileLine(item); } } return lineCount; } public static int countMaxFileLinesInProject(File projectRoot){ int line = 0; if(!projectRoot.isDirectory()){ if(isJavaFile(projectRoot.getName())) return countFileLine(projectRoot); else return 0; } //a directory File[] contents = projectRoot.listFiles(); int size = contents.length; for(int i=0;i<size;i++){ File item = contents[i]; int t = 0; if(item.isDirectory()){ t = countMaxFileLinesInProject(item); } else if(isJavaFile(item.getName())){ t = countFileLine(item); } line = (t>line)? t: line; } return line; } private static boolean isJavaFile(String name){ int length = name.length(); String ext = ""; name = name.toLowerCase(); if(length>5){ ext = name.substring(length-5); } if(ext.equals(".java")) return true; else return false; } public static int countFileLine(File file){ BufferedReader in = null; int numLines = 0; try { FileReader fileReader = new FileReader(file); in = new BufferedReader(fileReader); String line; do { line = in.readLine(); if (line != null && isSolidJavaLine(line)){ numLines++; } } while (line != null); } catch (IOException ioe) { ioe.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } } return numLines; } /** * TODO currently no comments is filter out */ public static boolean isSolidJavaLine(String line){ return true; } }