【VIP专享】综合性实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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):得到所有java文件的长度

+analyzeJava(list:ArrayList):分析所有java文件的注释行、空白行和代码行,并统计代码行中50个关键字出现的次数

+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("//"

相关文档
最新文档