Java编写的简单代码统计程序原代码

[size=medium]最近突发奇想,用Java编写了一个代码统计程序,主要统计这样几个数据:
一个项目里面的代码总行数,原代码文件总数,空白行数,import语句数,类数量,接口数量,
以及:
计算出平均每个文件的行数以后,
行数<=line 的文件数量
2倍,3倍,4倍,5倍,6倍,7倍,8倍,9倍,10倍,10倍以上的文件数量.
由此可以知道整个项目里面的文件行数与这些文件数量的关系.代码如下:[/size]

package com;

import java.util.*;
import java.io.*;

public class FileCompute {
public static void main(String args[]){
String filepath ="C://spring-framework-3.0.0.M1";
DirStat ds = new DirStat();
ds.readDir(filepath);
System.out.println("LineNumber:" + ds.dirlines);
System.out.println("FileNumber:" + ds.filenum);
System.out.println("blanklines:" + ds.blanklines);
System.out.println("importlines:" + ds.importlines);
System.out.println("class number:"+ds.classnum);
System.out.println("inter number:"+ ds.internum);

System.out.println("<=1 " + ds.num1);
System.out.println("<=2 " + ds.num2);
System.out.println("<=3 " + ds.num3);
System.out.println("<=4 " + ds.num4);
System.out.println("<=5 " + ds.num5);
System.out.println("<=6 " + ds.num6);
System.out.println("<=7 " + ds.num7);
System.out.println("<=8 " + ds.num8);
System.out.println("<=9 " + ds.num9);
System.out.println("<=10 " + ds.num10);
System.out.println("<=11 " + ds.num11);
System.out.println("Average:" + ds.dirlines / ds.filenum);
}
}

/**
* 统计单一文件的行数
* @author baoxinyu-itwb
*
*/
class FileStat{
public String filename=""; //文件名
public int fileSize = 0; //文件大小
public int fileLines = 0; //文件行数
public int blanklines = 0; //空白行数
public int importlines = 0; //import行数
public int classnum = 0;
public int internum = 0;
public int num1=0; //100行以内
public int num2=0; //100-200
public int num3=0; //200-300
public int num4=0; //300-400
public int num5=0; //400-500
public int num6=0; //500-6
public int num7=0; //6-7
public int num8=0; //7-8
public int num9=0; //8-9
public int num10=0; //9-10
public int num11=0; //10-

private int avenum = 156;
public void readFile(String sfilename){
try{
File file = new File(sfilename);
if ( file.exists() && file.isFile() ){
FileReader fileread=new FileReader(file);
BufferedReader bufread=new BufferedReader(fileread);
String read="";
while((read=bufread.readLine())!=null){
fileLines ++;
if (read.equals("")){
blanklines ++;
}else if(read.startsWith("import")){
importlines ++;
}else if(read.startsWith("public class")){
classnum ++;
}else if(read.startsWith("public interface")){
internum ++;
}
}
if (fileLines<=avenum){
num1 =1;
}else if(fileLines<=avenum*2){
num2 = 1;
}else if(fileLines<=3* avenum){
num3 = 1;
}else if(fileLines <= 4* avenum){
num4 = 1;
}else if(fileLines <= 5 * avenum){
num5 = 1;
}else if(fileLines <= 6 * avenum){
num6 = 1;
}else if(fileLines <= 7 * avenum){
num7 = 1;
}else if (fileLines <= 8 * avenum){
num8 = 1;
}else if (fileLines <= 9 * avenum){
num9 = 1;
}else if(fileLines <= 10 * avenum){
num10 =1;
}else{
num11 = 1;
}
filename = sfilename;

}
}catch(Exception e){
e.printStackTrace();
filename ="";
fileLines = 0;
}
}
}

class DirStat{
public String dirname ="";
public int dirlines =0;
public int blanklines = 0;
public int importlines = 0;
public int classnum = 0;
public int internum = 0;
public int num1=0; //100行以内
public int num2=0; //100-200
public int num3=0; //200-300
public int num4=0; //300-400
public int num5=0; //400-500
public int num6=0; //500-
public int num7=0; //6-7
public int num8=0; //7-8
public int num9=0; //8-9
public int num10=0; //9-10
public int num11=0; //9-10

public int filenum = 0;

public void readDir(String dirname){
try{
File dirfile = new File(dirname);
if (dirfile.exists() && dirfile.isDirectory()){
File[] child = dirfile.listFiles();
int i =0;
for(i=0;i<child.length;i++){
if (child[i].isFile() &&
child[i].getAbsolutePath().endsWith("java")){
FileStat fs = new FileStat();
fs.readFile(child[i].getAbsolutePath());
//System.out.println(child[i].getAbsolutePath());
dirlines = dirlines + fs.fileLines;
blanklines = blanklines + fs.blanklines;
importlines = importlines + fs.importlines;
classnum = classnum + fs.classnum;
internum = internum + fs.internum;
num1+= fs.num1;
num2+= fs.num2;
num3+= fs.num3;
num4+= fs.num4;
num5+= fs.num5;
num6+= fs.num6;
num7+= fs.num7;
num8+= fs.num8;
num9+= fs.num9;
num10+= fs.num10;
num11+= fs.num11;

filenum = filenum + 1;
}else if (child[i].isDirectory()){
DirStat ds = new DirStat();
ds.readDir(child[i].getAbsolutePath());
//System.out.println(child[i].getAbsolutePath());
dirlines = dirlines + ds.dirlines;
blanklines = blanklines + ds.blanklines;
importlines = importlines + ds.importlines;
classnum = classnum + ds.classnum;
internum = internum + ds.internum;
num1+= ds.num1;
num2+= ds.num2;
num3+= ds.num3;
num4+= ds.num4;
num5+= ds.num5;
num6+= ds.num6;
num7+= ds.num7;
num8+= ds.num8;
num9+= ds.num9;
num10+= ds.num10;
num11+= ds.num11;

filenum = filenum +ds.filenum ;
System.out.println(child[i].getAbsolutePath() +" --- "+ ds.dirlines);
}
}
}
}catch (Exception e){
e.printStackTrace();
dirname ="";
dirlines =0;
}
}
}


[size=medium]
我对自己本机的项目文件进行了一下分析,结果不是很乐观,结论以后再说.
于是又找到了本机下载的spring3.0原代码分析了一把.
下面是一些相关的数据:
代码总行数: 503003
文件总数: 3224
空白行: 67903
import行: 20708
类定义: 2199
接口定义: 409
文件平均行数:156
1倍以内的文件:2344
1-2倍: 534
2-3倍: 168
3-4倍: 73
4-5倍: 39
5-6倍: 17
6-7倍: 18
7-8倍: 7
8-9倍: 9
9-10倍: 4
10倍以上: 11
这个结论和我对自己公司的一个项目的统计结果基本上是一致的,就是说,平均行数都是100-200,150行以内的文件占了很大的部分.
随代码长度的增加,文件数量急剧减少.
10倍以上的文件比9-10倍的文件还要多.
整体来看,一个项目就像有一堆类一样,但仔细看看,每个类又没有多大,但总有几个庞然大物存在.[/size][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值