您的位置:首页 > 编程语言 > Java开发

java 实现源码统计 完整

2012-06-04 19:06 603 查看
在一家软件公司实习,刚开始接触java以及数据库方面的知识,经过不断摸索和高人指点终于完成了一个小小的实践,详细记录下来也许能帮助到别人

leader给我一套系统的源代码,任务是得到所有源码文件的文件名、路径、大小、类型以及每个代码文件的总行数、代码行数、注释行数、等一些相关信息,并且存储在oracle的数据库里

首先建两张表,然后分为两步:

第一步、首先借助dos命令dir d:\src /s > d:\\list.txt(这里假设待统计的源码放在d盘根目录的src文件夹里),生成一个文件列表list.txt,其中包括文件的文件名、路径、大小、类型等信息,但是格式比较混乱,这就要求java解析此文本文件的时候做一定的处理,我的代码是:

pst = (PreparedStatement) conn.prepareStatement("insert into src_list"

+ "(FILENAME, FILEDIR,FILESIZE,FILEDATE,CREDATE,FILETYPENO) values (?,?,?,?,?,?)" );

/**解析txt文件*/

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\list.txt")));

while((data = br.readLine())!=null)

{

/**过滤文件夹行及无关行,解析含有程序文件的行*/

if(data.contains("\\")) {rPass = data.replaceAll(" |的目录", "");continue; }

else if(data.startsWith("20")&&!data.contains("DIR")&&data.contains(".")){

String[] str = data.split(" +");

for(int i=0;i<str.length;i++){

System.out.println(str[i]);

}

System.out.println(rPass);

/**得到当前时间并插入表中CREDATE列*/

Date now = new Date();

DateFormat d1 = DateFormat.getDateTimeInstance();

String current = d1.format(now);

//System.out.println(now);

System.out.println(current);

/**判断文件类型编号插入FILETYPENO列*/

String typeno = "";

if(str[3].contains(".java")) {typeno = "01";}

else if(str[3].endsWith(".class")) {typeno = "02";}

else if(str[3].endsWith(".jsp")) {typeno = "03";}

else if(str[3].endsWith(".htm")) {typeno = "04";}

else if(str[3].endsWith(".jar")) {typeno = "05";}

else if(str[3].endsWith(".pc")|str[3].endsWith(".h")|str[3].endsWith(".ctl")) {typeno = "06";}

else if(str[3].endsWith(".sql")) {typeno = "07";}

else if(str[3].endsWith(".proc")) {typeno = "08";}

else if(str[3].endsWith(".sh")) {typeno = "09";}//shell文件

else if(str[3].endsWith(".ctl")) {typeno = "0A";}//ctl文件

else {typeno = "0B";}

//根据数据库表字段的不同可以做修改

pst.setString(4, str[0]+" "+str[1]);

pst.setString(1,str[3] );

pst.setString(3,str[2] );

pst.setString(2, rPass);

pst.setString(5, current);

pst.setString(6, typeno);

pst.addBatch(); //事务整体添加

}

else continue;

}

pst.executeBatch();

第二步,借助一个叫counting的源码统计软件得到源码的各种行数的信息存在一张excel表中,然后再去用java解析excel文件实现数据到数据库的存储,由于excel的数据格式很整齐,所以这部分代码很好写,但是要主要如果您使用poi的jar包去解析,低版本的只能解析excel2003版,好像poi3.5以上的版本可以解析2007版本的

最后,如果您要把这份工作交给别人去做的话,必须要让对方尽可能的操作简单、直观一些,为不要涉及去改代码什么的,最好双击就可以完成所有工作,于是当你代码写好以后将其打成一个jar包,然后再写个批处理文件,每次运行只需要修改一下批处理文件里的参数即可,当然我不知道还有没有更好的方法,欢迎补充

其实批处理文件内容很简单,就写了两行:

dir D:\20120430GTMCLatestSource /s > d:\\list.txt

java -jar D:\instructions\ToOracle\dist\ToOracle.jar jdbc:oracle:thin:@175.30.132.26:1521:dmsora subaruoa subaruoa D:\gtmc_utact_src_6874.xls D:\\list.txt

pause

作为一个还没入门的菜鸟,这些都是我这些天自己艰难摸索的,虽然功能是实现了,但里面肯定有很多不当的地方,或者可以做的更简单的地方,欢迎大家指点指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐