'''
package com.st.cms;
import java.io.;
import java.util.Scanner;
import java.util.regex.;
import javax.xml.bind.ParseConversionEvent;
/**
統計一個目錄下(含子目錄)所有java源文件中代碼行數
@author ybsun
-
20130304
*/
public class CodeLins {
private static int whiteLines;
private static int commentLines;
private static int normalLines;
private static int fileounts;
public static void CountLins(String CodePath){
File folder = new File(CodePath);//要統計的源目錄路徑recur(folder);//遞歸該目錄,統計其中代碼行數 System.out.println("總行數:" + (whiteLines+commentLines+normalLines)); System.out.println("空行數: " + whiteLines); System.out.println("注釋行數: " + commentLines); System.out.println("有效代碼行數: " + normalLines); System.out.println("代碼文件個數:"+fileounts); //return co;
}
/**遞歸方法 若源路徑為目錄,則遞歸,直至不包含子目錄
@param file 源文件或目錄
/
public static void recur(File file)
{
File[] files = file.listFiles();
for(int i=0; i<files.length; i++)
{
//若源文件是目錄,則遞歸
if(files[i].isDirectory() == true)
{
recur(files[i]);
}
//若源文件是普通文件且為java源文件,則逐行分析之 匹配文件名時用到了正則表達式
else if((files[i].isFile() == true) && files[i].getName().matches(".\.java$"))
{
fileounts++;
parse(files[i]);
}
}
}
/**將java源文件逐行解析,統計每種代碼數目 用到了正則表達式
-
@param file java源文件
/
public static void parse(File file)
{
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
boolean isComment = false; //用來標記那些/...*/注釋不在同一行的情況while((line=br.readLine()) != null) { line = line.trim();//注:去除每行行首和行尾的空格 但不會刪除換行符 區分開空白行與前面有縮進的代碼行 //if(line.matches("\\n[\\s| ]*\\r")) if(line.matches("^[\\s&&[^\\n]]*"))//空白行:以空白字符“ \t\n\x0B\f\r”開始且不含換行符 { //java中\n表示換行,\s匹配任意的空白符 包括換行符 whiteLines++; }else if(line.startsWith("/*") && line.endsWith("*/"))//注釋行:形如同一行中/*...*/ { commentLines++; }else if(line.startsWith("/*") && !line.endsWith("*/"))//注釋行:形如/*... { commentLines++; isComment = true; }else if(true == isComment) { commentLines++; //注釋行:包含在/*和*/之間的注釋行 if(line.endsWith("*/")) { isComment = false; //注釋行: 形如 ...*/ } }else if(line.startsWith("http://")) { commentLines++; //注釋行: 形如//.... }else { normalLines++; //有效代碼行 } }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally
{
if(br != null)
{
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}}
}
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String dirPath = input.nextLine();
CountLins(dirPath);
}
}
'''