java 实现源码统计 完整

在一家软件公司实习,刚开始接触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

 

作为一个还没入门的菜鸟,这些都是我这些天自己艰难摸索的,虽然功能是实现了,但里面肯定有很多不当的地方,或者可以做的更简单的地方,欢迎大家指点指正

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值