`
阿尔萨斯
  • 浏览: 4170357 次
社区版块
存档分类
最新评论

利用java小工具-----统计项目代码量

 
阅读更多
package com.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * 类名:CodeCounter.java<br>
 * <p>
 * 功能:统计项目代码量 工具类
 * </p>
 * 
 * @Author:<a href="mailto:llnyxxzj@163.com">lilong</a> <br/>
 * @Date:2013-3-15<br/>
 * @Time:下午5:12:11 <br/>
 * @Version:1.1 <br/>
 */
public class CodeCounter {

	static long commentLine = 0;
	static long whiteLine = 0;
	static long normalLine = 0;
	static long totalLine = 0;
	static boolean comment = false;

	public static void main(String[] args) {
		File file = new File("F:\\Workspaces\\Workspaces\\stockassistant"); // 在这里输入需要统计的文件夹路径
		getChild(file);
		System.out.println("有效代码行数: " + normalLine);
		System.out.println("注释行数: " + commentLine);
		System.out.println("空白行数: " + whiteLine);
		System.out.println("总代码行数: " + totalLine);
	}

	private static void getChild(File child) { // 遍历子目录
		if (child.getName().matches(".*\\.java$")) { // 只查询java文件
			try {
				BufferedReader br =  new BufferedReader(new FileReader(child));
				String line = "";
				while ((line = br.readLine()) != null) {
					parse(line);
				}
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if (child.listFiles() != null) {
			for (File f : child.listFiles()) {
				getChild(f);
			}
		}
	}

	private static void parse(String line) {
		line = line.trim();
		totalLine++;
		if (line.length() == 0) {
			whiteLine++;
		} else if (comment) {
			commentLine++;
			if (line.endsWith("*/")) {
				comment = false;
			} else if (line.matches(".*\\*/.+")) {
				normalLine++;
				comment = false;
			}
		} else if (line.startsWith("//")) {
			commentLine++;
		} else if (line.matches(".+//.*")) {
			commentLine++;
			normalLine++;
		} else if (line.startsWith("/*") && line.matches(".+\\*/.+")) {
			commentLine++;
			normalLine++;
			if (findPair(line)) {
				comment = false;
			} else {
				comment = true;
			}
		} else if (line.startsWith("/*") && !line.endsWith("*/")) {
			commentLine++;
			comment = true;
		} else if (line.startsWith("/*") && line.endsWith("*/")) {
			commentLine++;
			comment = false;
		} else if (line.matches(".+/\\*.*") && !line.endsWith("*/")) {
			commentLine++;
			normalLine++;
			if (findPair(line)) {
				comment = false;
			} else {
				comment = true;
			}
		} else if (line.matches(".+/\\*.*") && line.endsWith("*/")) {
			commentLine++;
			normalLine++;
			comment = false;
		} else {
			normalLine++;
		}
	}

	private static boolean findPair(String line) { // 查找一行中/*与*/是否成对出现
		int count1 = 0;
		int count2 = 0;
		Pattern p = Pattern.compile("/\\*");
		Matcher m = p.matcher(line);
		while (m.find()) {
			count1++;
		}
		p = Pattern.compile("\\*/");
		m = p.matcher(line);
		while (m.find()) {
			count2++;
		}
		return (count1 == count2);
	}

}


分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java开源包10

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Java毕业设计-基于springboot开发的医患档案管理系统-附毕设源代码+说明文档.rar

    该系统旨在为医疗机构提供一个便捷、高效的档案管理工具,帮助医生和患者更好地管理、查询和利用档案信息,从而优化医疗服务流程,提升患者满意度。 本系统采用了Spring Boot作为后端开发框架,以其轻量级、易上手...

    java开源包8

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包1

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Java毕业设计-基于springboot开发的网吧管理系统--论文-附毕设源代码+说明文档.rar

    在技术上,该系统采用了Spring Boot框架,充分利用了其轻量级、易上手以及开箱即用的特性,使得整个开发过程更加高效和稳定。同时,系统还整合了多种主流技术,如MyBatis、Spring Security等,保证了系统的安全性、...

    Java毕业设计-基于springboot开发的疾病防控综合系统设计与实现-毕业论文(附毕设源代码).rar

    该系统采用了先进的Spring Boot框架进行开发,充分利用了Spring Boot的轻量级、易上手、高效稳定等特点,使得整个系统具有良好的可维护性和可扩展性。在系统设计上,项目充分考虑了用户的使用习惯和业务需求,通过...

    java开源包11

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包6

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包9

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包4

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包101

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包5

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包3

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包2

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包7

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Java资源包01

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    面向企事业单位的项目申报小程序--(源码+部署说明+演示视频+源码介绍+lw).zip

    该小程序利用了微信的庞大用户基础和便捷的操作界面,为企事业单位提供了一个易于使用的项目管理工具。以下是该小程序的主要技术特点和功能介绍: 技术特点: 前端框架:采用了流行的前端开发框架,如Taro或uni-...

Global site tag (gtag.js) - Google Analytics