【VIP专享】综合性实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华南农业大学数学与信息学院综合性实验报告
课程: 面向对象程序设计实验
实验题目: java源代码分析程序
学号: 201512010224
姓名: 郑泽伟
专业: 计算机科学与技术
班级: 2015级4班
指导教师: 肖磊
提交日期: 2016年12月16日
1. 题目介绍与分析
1.1 题目介绍
1.背景描述:
(1)Java语言共有50个关键字。
(2)Java源程序是以“.java”为扩展名的文本文件。
(3)可以考虑在Java源程序中的行共有3种:
代码行,可运行的Java源代码。例如:
int n = 10;
注释行,3种注释均可。例如:
/**
文档注释
*/
/*
多行注释
*/
//单行注释
空行,既无代码,也无注释;
(4)特殊行的处理方法
如果有以下行尾单行注释的情况,将该行判定为代码行。
int number; //number表示人数
int n; /*n表示数量*/
如果有以下行尾多行注释的情况,第1行判定为代码行,第二行判定为注释行。
int number; /* number为整型
表示人数*/
假设被分析程序源码无其他特殊情况,如:
int /*人数*/ number;
2. 项目名和类名为JavaCodeAnalyzer,主类名等其他类名自行定义。
3. 实现功能:
(1) 程序运行时要求输入一个目录的名称。目录不存在或不是目录要提示错误并重新输入。
(2) 找出输入目录中所有的Java源程序文件(文件扩展名为“.java”), 并进行源程序文件进行分析。
需要分析的结果有:
目录中源程序文件个数
所有源程序文件总的字节数
所有源程序文件中代码行数、注释行数、空行数及总行数。说明:行以回车结束。
(3) 统计并按从多到少输出所有源程序文件中使用的Java关键字及其出现次数。
(4) 统计分析的结果除在屏幕显示外,还需要存储到一个文本文件中,文件内容应该如下:
目录名称:XXXXX(绝对路径方式)
共有源程序文件XX个,总的大小为:XXXXXX 字节
源程序文件总行数:xxxx,其中:
代码行数:xxx,占xx.xx%
注释行数:xxx,占xx.xx%
空白行数:xxx,占xx.xx%
源程序文件中使用过的关键字有(按使用次数降序排列):
关键字1:xx次
关键字2:xx次
关键字3:xx次
关键字4:xx次
关键字5:xx次
本次分析时间:年-月-日,时-分-秒
1.2 实验要求分析
本实验需要实现的要求具体可以分为四部分:
1)输入一个目录,对其进行判断是否存在该目录。若为目录,则找出该目录下的所有java
文件;否则,重新接受一个新目录。
2)分析所找出所有java文件的大小和数目,并统计所有java文件中的代码行数、注释行
数和空白行数,计算对应的百分比。
3)将所有代码行去除注释后连成一个字符串,并统计该字符串中java关键字出现的次数。
4)将产生的结果写入文本文件中。
2. 程序静态结构
本程序共设计了3个类,分别为Main类、JavaCodeAnalyzer类、KeyWord类,其中Main类定义了一个main方法,是程序的入口。JavaCodeAnalyzer类实现了程序的主要功能,包括接受文件,处理文件,统计分析和保存文件等主要功能。KeyWord类是JavaCodeAnalyzer 类的一个组合关系,为JavaCodeAnalyzer类提供部分功能。
JavaCodeAnalyzer类:
+analyze(file:File):接受输入处理文件,统计分析,保存分析结果
+search(path:File):找出所有java文件
+listFilteredFileName(file:File):找出当前目录的java文件
+getFileLength(list:ArrayList
+analyzeJava(list:ArrayList
+getKeyWords():创建50个关键字键值对
在KeyWord类中实现了Comparator接口的compare方法,用于比较不同关键字键值的大小,将关键字出现的次数从大到小排序。
3. 程序主要功能
(1)如何找出该目录下所有的java文件
一个目录下可能存在多个目录,此时单层循环是不可能遍历所有的java文件的。在JavaCodeAnalyzer类中的search()方法中,利用递归的方法找出所有的java 文件。循环条件是:
for (File file : files) {
if (file.isDirectory()) {
listFilteredFileName(file);
search(file);
}
}
逐个分析当前目录下的文件,若为目录,则找出该目录下的文件,并分析其中是否还有目录。
(2)统计所有java文件的代码行数、注释行数和空白行数
根据题目要求,注释存在的形式有单行注释、多行注释、文档注释等,空白行对应读取的字符串为空字符,故可以利用if…else进行判断。
while((temp=br.readLine())!=null){
totalLine++;
if(temp.trim().equals("")){
blankLine++; }else
if(temp.trim().startsWith("/*")||temp.trim().startsWith("//"