Java实现wc
github地址:https://github.com/lsgdsg/Java-wc
一、题目:实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。具体功能要求:
- 程序处理用户需求的模式为:wc.exe [parameter] [file_name]
- 基本功能列表:
- wc.exe -c file.c //返回文件 file.c 的字符数。(实现)
- wc.exe -w file.c //返回文件 file.c 的词的数目 。(实现)
- wc.exe -l file.c //返回文件 file.c 的行数。(实现)
- 扩展功能:
- -s 递归处理目录下符合条件的文件。(实现)
- -a 返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)
- 高级功能:
- -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。(未实现)
二、设计思路
利用Java里的IO流对文件内容进行读取,通过创建Scanner类的实例从键盘获取操作命令和目的文件,使用了缓冲流的readline()方法对文件按行读取,使用String类的split()方法、matches()方法对每一行的的字符数、词数、行数进行统计,判断每一行是否是空行、注释行或代码行,使用了IO中的FileFilter()接口以及File类中的listFiles(FileFilter f)方法实现对指定路径下的符合条件的文件进行过滤操作。将基本功能"-l"、“-w”、“-c”、“-a”封装在一个方法里Operation()中,将拓展功能“-a”的实现封装在方法SpecialLine()中,将拓展功能“-s”的实现封装在HandleFile()中,根据输入的命令,调用不同的方法,方法与方法之间也有调用关系。
- 功能模块:
基本功能:Operation(String[] sip) {…}
统计特殊行:SpecialLine(BufferedReader br) {…}
处理多个文件:HandleFile(String[] file) {…}
文件过滤器:class MyFileFilter implements FileFilter{…}
- 流程图:

三、测试结果:
1.命令“-s”、”-a“:

2.命令“-w”:

3.命令“-c”:

4.命令“-l”:

四、PSP2.1表格
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
20 |
20 |
|
· Estimate |
· 估计这个任务需要多少时间 |
60 |
60 |
|
Development |
开发 |
180 |
240 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
20 |
20 |
|
· Design Spec |
· 生成设计文档 |
30 |
30 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
30 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
|
· Design |
· 具体设计 |
40 |
60 |
|
· Coding |
· 具体编码 |
180 |
240 |
|
· Code Review |
· 代码复审 |
25 |
30 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
60 |
|
Reporting |
报告 |
30 |
30 |
|
· Test Report |
· 测试报告 |
20 |
20 |
|
· Size Measurement |
· 计算工作量 |
20 |
30 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
25 |
|
合计 |
745 |
955 |
五、项目总结
通过这一次的程序练习,不仅对软件工程的思想有了更深的认识,在动手实现之前通过估计时间并与实际完成所需时间进行对比,还让我意识到自己其实对实现这样一个小程序还不够熟练,对编程的练习还是太少,在以后的学习中需要加强练习,提高技巧,提升能力,以减短不必要的时间的消耗和浪费。

浙公网安备 33010602011771号