1.码云地址:
https://gitee.com/zhuyao1/workCount
2.psp表格
PSP2.1表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
30 |
20 |
· Estimate |
· 估计这个任务需要多少时间 |
20 |
10 |
Development |
开发 |
300 |
360 |
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
30 |
· Design Spec |
· 生成设计文档 |
20 |
30 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
15 |
15 |
· Design |
· 具体设计 |
20 |
15 |
· Coding |
· 具体编码 |
200 |
360 |
· Code Review |
· 代码复审 |
30 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
30 |
Reporting |
报告 |
10 |
10 |
· Test Report |
· 测试报告 |
20 |
10 |
· Size Measurement |
· 计算工作量 |
20 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
30 |
|
合计 |
785 |
960 |
3.需求功能分析
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
可执行程序命名为:wc.exe,该程序处理用户需求的模式为:
wc.exe [parameter] [input_file_name]
存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。
我拿到这个问题一开始想的就是要使用java的io流来读取文件,从而判断文件中的单词数,字符数等。
学习java的文件读取和写入。参考链接:https://blog.csdn.net/linzhiqiang0316/article/details/71744340 或https://blog.csdn.net/malik76/article/details/6408726/
4.程序设计
我总共设计了两个类:
1.程序的功能类,读取文件的字符,字数,行数。
1 public String count_word(String filename) throws IOException//统计单词数
2 {
3 ...
4 }
5
6 public String count_char(String filename) throws IOException//统计字符数
7 {
8 ...
9 } 10 11 public String count_line(String filename) throws IOException//统计行数 12 { 13 ... 14 } 15
2.main函数类,主要用于判断用户的命令,还有一个将结果写入文件的方法
1 public static void main(String[] args) throws IOException
2 {
3
4 ...
5 }
6 public static void output(String result) throws IOException
7 { 8 ... 9 }
5.具体编码(还有很多不足之处,希望各位提出意见)
功能类:
public String count_word(String filename) throws IOException//统计单词数
{
int wordnum=0;//单词数
File file =new File(filename);
int x=-1;
FileReader fReader=new FileReader(file);
while((x=fReader.read())!=-1)//按字符读文件,碰到符合条件的,单词数+1
{
char a=(char)x; if(a==' '||a==','||a=='.') { wordnum++; } } String result=filename+",单词数:"+wordnum;//保存结果 fReader.close();//关闭流 return result;//返回结果 } public String count_char(String filename) throws IOException//统计字符数 { int charnum=0;//字符数 File file=new File(filename); int x=-1; FileReader fReader=new FileReader(file); while((x=fReader.read())!=-1)//按字符读文件,判断,符合则字符加一 { char a=(char)x; if(a!='\n'&&a!='\r') { charnum++; } } String result=filename+",字符数:"+charnum;//保存结果 fReader.close();//关闭流 return result;//返回结果 } public String count_line(String filename) throws IOException//统计行数 { int line=0;//行数 File file=new File(filename); BufferedReader bReader;//缓冲区 bReader=new BufferedReader(new FileReader(file)); while(bReader.readLine()!=null)//对文件进行以行为单位读取,不为空则行数加一 { line++; } bReader.close();//关闭流 String result=filename+",行数:"+line;//保存结果 return result;//返回结果 }
main函数类:
public class cMain {
static String filepath="G:/eclipse/workCount/result.txt";//设置初始的文件输出路径,有-o命令就对其更改
public static void main(String[] args) throws IOException
{
workCount wCount=new workCount();//实例化workCount
List comonds=new ArrayList<>();//创建list存储命令,即-c,-o等选项
List filenames=new ArrayList<>();//创建list存储文件的路径
for(int i=0;i {
if(args[i].startsWith("-"))
{
comonds.add(args[i]);//添加命令
} else{ filenames.add(args[i]);//添加文件的路径 } } String result="";//存储每一次返回的结果 for(int i=0;i) { if(!comonds.contains("-o"))//判断命令中是否含有-o的命令 { for (int j = 0; j < filenames.size(); j++) { switch (comonds.get(i)) {//判断命令并执行 case "-c": result+=" "+wCount.count_char(filenames.get(j)); break; case "-l": result+=" "+wCount.count_line(filenames.get(j)); break; case "-w": result+=" "+wCount.count_word(filenames.get(j)); break; default: System.out.println("有命令错误"); break; } } output(result);//将结果输出至文件 } else {//有-o的命令,则最后一个文件路径则是想要输出的文件路径 filepath=filenames.get(filenames.size()-1);//对输出文件的路径进行更改 for (int j = 0; j < filenames.size()-1; j++) { switch (comonds.get(i)) {//判断命令并执行 case "-c": result+=" "+wCount.count_char(filenames.get(j)); break; case "-l": result+=" "+wCount.count_line(filenames.get(j)); break; case "-w": result+=" "+wCount.count_word(filenames.get(j)); break; default: System.out.println("有命令错误"); break; } } output(result);//将结果输出至文件 } } } public static void output(String result) throws IOException { File file=new File(filepath);//定义文件 if(!file.exists())//判断文件是否存在,不存在则直接创建新文件 { file.createNewFile(); } FileWriter fileWriter=new FileWriter(file); BufferedWriter bWriter=new BufferedWriter(fileWriter);//放入缓冲层 bWriter.write(result);//写入数据 bWriter.close();//关闭流 } }
6.对程序的基本测试
因为这个程序涉及args【】内的命令操作,在之前都比较陌生,后来参考了相关的文章,学习到了对其中命令的操作。
参考链接:https://www.cnblogs.com/xy-hong/p/7197725.html
比较详细,可以参考!
7.本程序的本机测试
将Java代码打包为jar文件,并转为exe可执行文件的方法,可参考下面的博客:
https://blog.csdn.net/sunkun2013/article/details/13167099(很详细)
8.个人项目总结
在这一次的程序设计的过程中,我觉得是收获巨大的,我已开始拿到这个题目,说实话,脑壳痛,不过还是得做嘛,静下心来,一步一步分析,不会就去查,从一个项目之中,不仅学习到的是编程的知识,更多的是如何的一个人学习,在一个项目中你会去翻阅无数的资料,这我觉得才是,真正巨大的收获。这次还涉及到了,git码云的使用,我相信这个在以后的工作中,不一定会用到,但一定能提高我们的能力,自觉性。第一次写博客,写的不好,希望得到建议,谢谢!希望能帮助到人!