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

去年在写软件著作权时候需要统计整体工程的代码量(由于一个大系统要写六个软件著作权),无奈之下写了个统计代码量的算法(大概写了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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值