实现wc部分功能 java
GitHub地址:https://github.com/carlylewen/ruangong
相关要求
基本功能
- wc.exe -c file.c //返回文件 file.c 的字符数(实现)
- wc.exe -w file.c //返回文件 file.c 的词的数目 (实现)
- wc.exe -l file.c //返回文件 file.c 的行数(实现)
扩展功能
- -s 递归处理目录下符合条件的文件。(未实现)
- -a 返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)
高级功能
- 基本的Windows GUI 程序操作(未实现)
- 支持通过图形界面选取文件(实现)
- 支持通过图形界面展现文件的信息(未实现)
PSP
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
||
|
· Estimate |
· 估计这个任务需要多少时间 |
60 | 85 |
|
Development |
开发 |
||
|
· Analysis |
· 需求分析 (包括学习新技术) |
180 | 210 |
|
· Design Spec |
· 生成设计文档 |
120 | 80 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 | 40 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
60 | 30 |
|
· Design |
· 具体设计 |
180 | 160 |
|
· Coding |
· 具体编码 |
360 | 350 |
|
· Code Review |
· 代码复审 |
60 | 30 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 | 60 |
|
Reporting |
报告 |
60 | 30 |
|
· Test Report |
· 测试报告 |
60 | 60 |
|
· Size Measurement |
· 计算工作量 |
60 | 30 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 15 |
|
合计 |
1340 | 1095 |
设计说明
主函数: 通过键盘输入获取命令,将命令分割为命令参数和文件名,调用统计函数功能。
统计函数:读取文件,通过readline()读取每一行的内容,根据readline的功能记录行数; 根据所读每一行的长度计算字符数;再将所读的数据根据空格切割拼接计算;空行、 注释行、代码行则用正则判断计算。

使用说明
需求举例:
-c [file.txt] 返回文件 file.txt 的字符数
-w [file.txt] 返回文件 file.txt 的单词数
-l [file.txt] 返回文件 file.txt 的行数
-a [file.txt] 返回文件 file.txt 的空行、注释行、代码行数
-x 打开图形界面选择文件,返回文件 file.txt 的单词数,行数,字符数空行、注释行、代码行数
代码
项目目录:

主函数:
public static void main(String[] args) {
// TODO Auto-generated method stub
command = " ";// 存储用户命令
while (true) {
int flag1 = 0;
System.out.println("請输入指令及路径:");
Scanner s = new Scanner(System.in);// 从键盘输入
command = s.nextLine();// 获取输入命令
// 图形化
if (command.equals("-x")) {
tuxing();
continue;
}
String[] split = command.split(" ");// 分割命令
int messlength = split.length;
sparameter = new String[messlength - 1];
// 获取命令参数
for (int i = 0; i < messlength - 1; i++) {
sparameter[i] = split[i];
}
// 获取文件名
filename = split[messlength - 1];
extend();// 统计功能
output();// 输出
}
}
统计函数:(基本功能与空行、注释行、代码行计算)
private static void extend() {
cchar = 0;
cword = 0;
cline = 0;
spaceline = 0;
codeline = 0;
noteline = 0;
boolean q=false;
File file = new File(filename);
if (file.exists()) {
try {
FileInputStream filein = new FileInputStream(file);// 输入流读取文件
BufferedReader bread = new BufferedReader(new InputStreamReader(filein));
String line = "";
StringBuffer buffer = new StringBuffer();
while ((line = bread.readLine()) != null) {
cline++;
buffer.append(line);
cchar += line.length();
line=line.trim();
// 空行,注释行,代码行
String begin="\\s*/\\*.*";
String end =".*\\*/\\s*";
String x= "//.*";
String space="\\s*";
if(line.matches(begin)&&line.matches(end)) {
++noteline;
}
if(line.matches(begin)) {
++noteline;
q=true;
}
else if(line.matches(end)) {
++noteline;
q=false;
}
else if(line.matches(space)) {
++spaceline;
}
else if(line.matches(x)) {
++noteline;
}
else if(q) {
++noteline;
}
else {
++codeline;
}
}
cword = buffer.toString().split("\\s+").length;
bread.close();
filein.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("failed!!");
}
}
图形界面函数:
private static void tuxing() {
// TODO Auto-generated method stub
flag = 1;
chooser = new JFileChooser();
int value = chooser.showOpenDialog(null);
if (value == JFileChooser.APPROVE_OPTION) {
File ff = chooser.getSelectedFile();
filename = ff.getAbsolutePath();
extend();
output();
}
}
测试:

测试结果:

高级功能:
测试文件:

测试结果:


代码覆盖率
进行代码覆盖率测试

代码覆盖率:95.2%
总结:
从一开始计划的时候,先确定了基本功能的实现用什么方法,也重新看了java的文件流和I/O流等,然后再学习正则表达式,如何去判断空行,代码行和注释行,这次项目让我重新复习了许多知识点,也学会更加规范和简洁的编写代码。在这次作业中,我采用了java语言来实现,在完成代码后,也学习了如何比较规范的多方面测试代码以及测试代码覆盖率。
不足:在这次实践中,没有完成递归功能,由于在实现过程中一直出现文件未授权访问的情况,在多方求解后依然无法解决,因此放弃了递归的功能。
总的来说,这一次实践让我认识了,编程不仅仅是编写代码,它包括从一开始的设计构思,到编写实现功能,以及最后的运行测试优化,也希望能从以后学习到更多知识和技能。
实现wc部分功能 java的更多相关文章
- 通过python实现wc基本功能
---恢复内容开始--- 1.Github项目地址: https://github.com/zhg1998/ww/blob/master/wc.py 2.项目相关要求: 写一个命令行程序,模仿已有wc ...
- 小白のjava实现wc.exe功能
GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c //返回文件 file. ...
- JAVA实现WC.exe功能
项目要求 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [paramet ...
- Java实现WC基本功能
GitHub仓库:https://github.com/douyazai/WCbase 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...
- Java实现wc部分功能
GitHub仓库:https://github.com/TaoTaoLv1/WcProject 一.开发前PSP表格预估* PSP2.1 Personal Software Process Stage ...
- 用c语言基本实现wc.exe功能
网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...
- 个人项目:实现wc.exe(Java)
本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...
- WC 代码统计 java
GitHub地址 项目需求 实现一个wc统计程序,可以对文本进行相关功能的统计与分析 基本功能 -c 统计字符数 -w 统计文件词数 -l 统计行数 扩展功能 -s 递归搜索目录下面的文件 -a 返回 ...
- springmvc+mybatis用多选框批量删除的功能Java代码
今天写了一个批量删除的功能,在后台传值过程中一直出错,最终还是请教了北京的一位高手帮我解决的,在此首先要好好感谢他,以后我有幸能帮助别人的话,决不推辞. 废话不说,直接进入正题,我会将在编写过程中出现 ...
随机推荐
- json_decode与json_encode容易被忽视的点
一.json_decode的使用,json_decode共有4个参数 json_decode ( string $json [, bool $assoc=FALSE [, int $depth= 51 ...
- 使用 Helm 包管理工具简化 Kubernetes 应用部署
当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...
- mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)
一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同 ...
- 可以落地的DDD到底长什么样?
领域驱动设计的概念 大家都知道软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前通常需要进行大量的业务知识梳理,然后才能到软件设计的层面,最后才是开发. ...
- 【杂谈】FilterChain相关知识整理
前言 做后台的,Filter肯定没少配置,但是知晓其原理的可能不多.在这之前我也不懂,但这并不影响业务开发,同时也有其他的知识要学,所以一直就没看.这阵子有点闲,刚好在看<How Tomcat ...
- 跟面试官聊.NET垃圾收集,直刺面试官G点
装逼的面试官和装逼的程序员 我面试别人的时候,经常是按这种路子来面试: 看简历和面试题,从简历和面试题上找到一些技术点,然后跟应聘者聊. 聊某个技术点的时候,应聘者的回答会牵涉到其他的技术点,然后我会 ...
- TypeScript学习之WebStorm(1)
修改快捷键 本没有想要修改快捷键,调试的时候下意识的 按F10,发现还是习惯使用visual studio的快捷键.WebStorm支持修改快捷键,File=>Settings=>Keym ...
- [转]PHP开发者必须了解的工具—Composer
本文转自:https://blog.csdn.net/Zhihua_W/article/details/80345973 Composer是PHP 用来管理依赖(dependency)关系的工具.你可 ...
- 第一册:lesson sixty seven。
原文: The weekend. A:Hello , were you an tht butcher's? B:Yes I was. A:Were you at the butcher's too? ...
- 推送GitHub报错 fatal: Out of memory, malloc failed 解决办法
现象: 推送GitHub时,出现如下报错 fatal: Out of memory, malloc failed (tried to allocate XXXXXX bytes)error: fail ...