`
qyhdt
  • 浏览: 15294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

计算整个工程代码量的算法源码

    博客分类:
  • JAVA
阅读更多
去年在写软件著作权时候需要统计整体工程的代码量(由于一个大系统要写六个软件著作权),无奈之下写了个统计代码量的算法(大概写了20分钟),个人感觉很准,现在公布一下源码,基本算法就是递归也没啥高技术含量,需要用到的朋友直接拷贝 方法调用在main里面都有说明,转载时候请注明出处。
package com.rose.common.frame.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 获得某个工程的代码量(除去空白行)
 * 可统计java jsp xml 等代码行数。
 * @author qiuy
 */
public class LineNumberReaderUtils {
	
	/**
	 * 得到指定java文件行数
	 * @param path
	 * @return
	 */
	public static int getAllLineNumber(String path){
		
		int result = 0;
		File file = new File(path);
		InputStream is = null;
		InputStreamReader reader = null;
		LineNumberReader lineNumberReader = null;
		try {
			is = new FileInputStream(file);
			reader = new InputStreamReader(is);
			@SuppressWarnings("unused")
			String strTemp = "";
			lineNumberReader = new LineNumberReader(reader);
			while((strTemp = lineNumberReader.readLine()) != null){
				if (!"".equals(strTemp.trim())) {
					result++;
				}
			}
		} catch (Exception e) {
			
		}
		return result;
	}
	/**
	 * 
	 * @param path 目录路径
	 * @param type 得到文件路径
	 * @param needSub 是否需要递归
	 * @param list 装载所有type类型的文件list
	 * @return
	 */
	public static List<String> getAllFileByPath(String path,String type,boolean needSub,List<String> list){
		String[] files = null;
		File file = new File(path);
		files = file.list();
		File fileRoot = null;
		String fileName = "";
		String fileType = "";
		for (int i = 0; i < files.length; i++) {
			fileRoot = new File(path+File.separator+files[i]);
			if (!fileRoot.isDirectory()) {
				fileName =fileRoot.getName();
				if (fileName.indexOf(".") != -1) {
					fileType = fileName.substring(fileName.lastIndexOf("."));
				}
				if (fileType.equals(type)) {
					list.add(fileRoot.getAbsolutePath());
				}
			}
			if (needSub && fileRoot.isDirectory()) {
				getAllFileByPath(fileRoot.getAbsolutePath(), type, needSub,list);
			}
			
		}
		
		return list;
	}
	/**
	 * 
	 * @param path 目录路径
	 * @param type 文件类型
	 * @param needSub 是否需要递归
	 * @return
	 */
	public static int getAllLineNumberByPath(String path,String type ,boolean needSub){
		if (path == null || "".equals(path.trim()) || type == null || "".equals(type.trim())) {
			return 0;
		}
		List<String> list = getAllFileByPath(path, type, needSub, new ArrayList<String>());
		int allLineNumberCount = 0;
		String filePath= "";
		for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
			filePath = iterator.next();
			allLineNumberCount += getAllLineNumber(filePath);
		}
		return allLineNumberCount;
	}
	
	/**
	 * 测试main方法
	 * @param args
	 */
	public static void main(String[] args) {
		
		//参数说明
		
		//  1 "D:\\javaWorkPlace\\rose-frame" 在这个目录下面的文件
		//  2 ".java"要数行数的目标文件 如果统计jsp就改成.jsp
		//	3 true表示需要目录下中所有java文件(支持递归)
		
		int count = getAllLineNumberByPath("D:\\javaWorkPlace\\rose-frame", ".java", true);
		System.out.println(count);
	}
}
1
4
分享到:
评论
2 楼 qyhdt 2010-05-24  
这个注视是算代码量的,不过要是不算的话可以加过滤,或者直接反编译.class然后计算
cocoaysj 写道
注释也能算进代码量啊?


这个注释是算代码量的,不过要是不算的话可以加过滤,或者直接反编译.class然后计算
1 楼 cocoaysj 2010-05-24  
注释也能算进代码量啊?

相关推荐

    VC&C++编写的计算程序代码量的程序

    标题中的“VC&C++编写的计算程序代码量的程序”指的是一个使用Microsoft Visual C++(简称VC)开发的工具,其主要功能是统计C++源代码的行数,特别是针对大型项目,例如描述中提到的400多万行的工程。这个程序能够...

    科学工程C源程序范例解,科学和工程计算基础

    在压缩包中的"工程计算"文件,可能包含的是特定的工程问题的C源代码,比如结构分析、流体动力学模拟、电路仿真等。通过阅读和分析这些代码,读者可以将理论知识与实际问题相结合,提升解决实际工程问题的能力。 总...

    MEC边缘计算源码——使用强化深度学习

    边缘计算(Mobile Edge Computing,简称MEC)是云计算技术在移动网络边缘的延伸,它将计算能力和存储资源下沉到网络的边缘,以减少数据传输延迟,提高服务响应速度,为实时性和低延迟要求高的应用提供可能。...

    源代码计算行数计数器

    对于工作量计算,源代码行数可以作为一个基础指标。开发者可以通过历史数据和经验来估计每行代码所对应的工作时间。此外,工具可能还会提供一些高级功能,如按文件、按目录、按作者或按时间范围统计,以满足不同的...

    烟雾模拟源工程代码

    代码量不多,意味着它可能采用了一种简化的方法,易于理解和实践。 首先,烟雾模拟的核心算法通常基于Navier-Stokes方程,这是一个描述流体运动的数学方程组。在图形学中,为了实时渲染,通常会采用离散格子 ...

    源代码计算行数工具好用

    源代码计算行数工具是软件开发过程中的一个重要辅助工具,它可以帮助开发者统计项目中的代码量,从而进行项目规模评估、代码复杂性分析以及代码维护性的初步判断。标题提到的"源代码计算行数工具好用",这表明该工具...

    计算流体力学经典案例源代码.rar

    通过对这些源代码的学习和理解,可以深入了解CFD的数值算法,并提升解决实际工程问题的能力。无论是FORTRAN还是MATLAB,都能提供宝贵的实践经验,帮助工程师和研究人员在流体动力学领域不断探索和创新。

    VB工程量计算表

    在建筑、土木、机电等工程领域,精确计算工程量是项目预算、进度控制和成本估算的重要环节。通过自动化计算,可以大大提高工作效率,减少人为错误。 VB是一种面向对象的编程语言,由微软公司开发,广泛应用于桌面...

    管网工程源代码+递归计算+论文代码+算例

    压缩包内的“程序和算例”文件可能包含了实现这些计算的源代码,这可能是用C、Python、Matlab或其他编程语言编写的。通过阅读和分析这些源代码,我们可以深入了解如何将理论知识转化为实际的计算程序。同时,提供的...

    Fortran 95/2003科学计算与工程_fortran科学计算_

    OpenMP是一个流行的并行编程接口,可以添加到源代码中,以利用多核处理器的并行能力,显著提升计算效率。 8. **错误处理**:Fortran 95/2003提供了异常处理机制,使得程序在遇到错误时能够优雅地处理,而不是突然...

    Python科学计算第2版--张若愚pdf书籍+源代码

    6. **源代码**:随书附带的源代码可以帮助读者更好地理解书中的实例,通过实际操作来加深对Python科学计算的理解。读者可以下载并运行这些代码,从而提高自己的编程技能。 7. **科学计算流程**:书中会讲解如何运用...

    计算源代码行数源代码VC++

    1. **源代码行数(LOC)**:LOC是衡量软件工程中工作量、复杂性和维护难度的一种简单指标。尽管它有其局限性,例如不能完全反映代码质量或效率,但在项目管理和初步估算工作量时仍有一定的参考价值。 2. **...

    统计项目代码量

    【标题】"统计项目代码量"的实现是一个Java程序,其主要目的是为了自动化地计算一个项目目录中特定类型的源代码文件(例如PHP、Java、HTML等)的代码行数。这个程序提供了一种高效且方便的方式来量化软件项目的规模...

    工程计算七十六款NB小软件.zip

    标签为“源码软件”,这意味着除了可执行程序外,这个压缩包可能还包含了这些软件的源代码。这对于学习编程、理解算法或者根据需求定制软件的用户来说是个宝藏。源代码的提供允许用户深入理解软件的工作原理,甚至...

    VC编写的计算机联锁源码

    本资源是使用Visual C++(简称VC)编写的计算机联锁系统的源代码,对于学习和理解计算机联锁系统的工作原理以及VC编程有很高的参考价值。 首先,我们要了解VC++是一种强大的Windows平台下的C++开发工具,由...

    C++源代码计算工具(有源代码)

    "C++源代码计算工具"就是针对这类需求设计的,它可以帮助开发者统计C++工程中的源代码行数,从而分析项目的复杂度、估计开发工作量或进行性能优化。 本工具的核心功能是解析C++源文件,识别其中的语句结构,然后...

    工程预算类软件源代码包括数据库

    本软件源代码是基于C#编程语言和SQL数据库技术开发的,旨在提供一套完整的工程预算解决方案。下面将详细介绍这个软件的核心功能和相关技术知识。 首先,C#是一种面向对象的编程语言,由微软公司推出,广泛应用于...

    matlab算法源码MATLAB设计源码

    标题“matlab算法源码MATLAB设计源码”表明本内容涉及的主题为MATLAB这一强大的数学计算和仿真软件的算法设计与源代码。MATLAB(矩阵实验室)是一种高性能的数值计算环境,广泛应用于工程计算、数据分析、算法开发等...

    有限元计算程序源代码

    ### 有限元计算程序源代码知识点解析 #### 一、有限元法简介 有限元法(Finite Element Method, FEM)是一种数值分析方法,广泛应用于工程领域中的结构分析、流体动力学、热传导等问题的求解。它通过将复杂的物理...

Global site tag (gtag.js) - Google Analytics