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
作为一个还没入门的菜鸟,这些都是我这些天自己艰难摸索的,虽然功能是实现了,但里面肯定有很多不当的地方,或者可以做的更简单的地方,欢迎大家指点指正
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
作为一个还没入门的菜鸟,这些都是我这些天自己艰难摸索的,虽然功能是实现了,但里面肯定有很多不当的地方,或者可以做的更简单的地方,欢迎大家指点指正
相关文章推荐
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 邻接表无向图的Java语言实现完整源码
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- Java实现的比较两个不同的文本,在文本面板中显示不同文本的内容(完整源码)
- JAVA源码-实现INT位数统计
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 纯JAVA实现Online Judge--6.完整源码
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- Java实现的计算器(完整源码)
- Java实现的打地鼠小游戏完整示例【附源码下载】
- Java实现打飞机小游戏(附完整源码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 用java实现新浪爬虫,代码完整剖析(仅针对当前SinaSignOn有效)
- Java集合源码学习(3)_Collection接口的基础实现AbstractCollection
- Java web 实现 之 Filter分析ip统计网站的访问次数
- java swing mysql实现的ktv点歌系统项目源码附带视频教程
- 1038. 统计同成绩学生(20)-浙大PAT乙级真题java实现
- java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到SSM环境全过程(附源码)
- Java并发框架Disruptor实现原理与源码分析(三) RingBuffer原理模型与源码分析