/*** 代码行数统计
*@authorThinkGem
*@version2014-7-22*/
public classCodeCounter {public static voidmain(String[] args) {
//获取当前类的资源文件路径,即../../target/test-classes/
String file= CodeCounter.class.getResource("/").getFile();//System.out.println(file);//path=D:/Source_Code/koudaimini/src/
//设置统计根路径为src//String path = file.replace("target/test-classes", "src");
String path = "D:\\Source_Code\\zbg\\modules\\zbg-api\\src";
ArrayList al = CodeCounter.getFile(newFile(path));for(File f : al) {if (f.getName().matches(".*\\.java$")){ //匹配java格式的文件
CodeCounter.count(f);
System.out.println(f);
}
}
System.out.println("统计文件:" +CodeCounter.files);
System.out.println("代码行数:" +CodeCounter.codeLines);
System.out.println("注释行数:" +CodeCounter.commentLines);
System.out.println("空白行数:" +CodeCounter.blankLines);
}static long files = 0;static long codeLines = 0;static long commentLines = 0;static long blankLines = 0;static ArrayList fileArray = new ArrayList();/*** 获得目录下的文件和子目录下的文件
*@paramf
*@return
*/
public static ArrayListgetFile(File f) {
File[] ff=f.listFiles();for(File child : ff) {if(child.isDirectory()) {
CodeCounter.getFile(child);
}else{
CodeCounter.fileArray.add(child);
}
}returnCodeCounter.fileArray;
}/*** 统计方法
*@paramf*/
private static voidcount(File f) {
BufferedReader br= null;boolean flag = false;try{
br= new BufferedReader(newFileReader(f));
String line= "";while ((line = br.readLine()) != null) {
line= line.trim(); //除去注释前的空格
if (line.matches("^[ ]*$")) { //匹配空行
CodeCounter.blankLines++;
}else if (line.startsWith("//")) {
CodeCounter.commentLines++;
}else if (line.startsWith("/*") && !line.endsWith("*/")) {
CodeCounter.commentLines++;
flag= true;
}else if (line.startsWith("/*") && line.endsWith("*/")) {
CodeCounter.commentLines++;
}else if (flag == true) {
CodeCounter.commentLines++;if (line.endsWith("*/")) {
flag= false;
}
}else{
CodeCounter.codeLines++;
}
}
CodeCounter.files++;
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{if (br != null) {try{
br.close();
br= null;
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
}