论坛首页 Java企业应用论坛

统计代码行数

浏览 1262 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-09-06   最后修改:2011-02-07
public class CodeCounter {
	static long codeLines = 0;
	static long commentLines = 0;
	static long spaceLines = 0;
	static long classnum = 0;
	static long num = 0;

	public static void main(String[] args) {
		// 这里的目录要输入你要统计代码的文件夹目录
		File f = new File("D:\\Program Files\\MyEclipse 6.0\\workspace\\FlexWeb"); 
		if (f.exists()) {
			judge(f);
		}

		System.out.println("实际代码行数为:" + codeLines);
		System.out.println("注释代码行数为:" + commentLines);
		System.out.println("空行行数为:" + spaceLines);
		num = codeLines + commentLines + spaceLines;
		System.out.println("总的行数为:" + num);
		System.out.println("类的数目为:" + classnum);
	}

	private static void judge(File f) {
		if (!f.isFile()) {
			File[] fs = f.listFiles();
			for (File child : fs) {
				judge(child);
			}
		}
		if (f.exists() && f.isFile()) {
			counter(f);
		}
	}

	private static void counter(File child) {
		FileReader fr;
		try {
			fr = new FileReader(child);
			BufferedReader br = new BufferedReader(fr);
			String line = "";
			boolean flag = false;
			if (child.getName().matches(".*java$")) {
				try {
					while ((line = br.readLine()) != null) {
						String l = line.trim();
						if (l.matches(".*class.+")) {
							classnum++;
						}
						if (l.matches("^[[\\s]&&[^\\n]]*")) {
							spaceLines++;
						} else if (l.startsWith("/*") && l.endsWith("*/")) {
							commentLines++;
							flag = false;
						} else if (l.startsWith("/*")) {
							commentLines++;
							flag = true;
						} else if (l.endsWith("*/")) {
							commentLines++;
							flag = false;
						} else if (true == flag) {
							commentLines++;
						} else if (l.startsWith("//")) {
							commentLines++;
						} else {
							codeLines++;
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics