一、项目简介
源码地址:https://gitee.com/jie140367/WordCount2
作业地址:https://edu.cnblogs.com/campus/xnsy/Test/homework/2203
1.项目需求:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的单词总数
wc.exe -l file.c //返回文件 file.c 的总行数,
wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt
wc.exe -s //递归处理目录下符合条件的文件
2.开发环境:Idea 2017
3.开发语言:Java
4.使用工具:exe4j(将java打包好的jar包转化为exe可执行文件)
exe4j下载地址:https://www.softpedia.com/get/Authoring-tools/Setup-creators/exe4j.shtml
exe4j教程:https://blog.csdn.net/xiazdong/article/details/7225734
二、项目实现
首先放上我的项目目录:

在拿到这个问题之后,首先要把文档抽象出一个对象,属性包含有字符数,单词数和行数。所以创建了一个java Pojo对象类——Wc.java
- package com.jie;
- /**
- * @Author: jie140
- * @Date: 2018/10/20 20:59
- */
- public class Wc {
- //定义字符
- public int chars;
- //定义单词
- public int words;
- //定义行数
- public int lines;
- public int getChars() {
- return chars;
- }
- public int getWords() {
- return words;
- }
- public int getLines() {
- return lines;
- }
- public Wc(int chars, int words, int lines) {
- this.chars = chars;
- this.words = words;
- this.lines = lines;
- }
- }
之后还有接受参数的主启动类——Main.java
其中的逻辑实现类比较复杂,所以又创建了一个专门返回Wc对象的类——StatisticalCount.java,传入空的Wc对象,经过逻辑处理,返回一个具有字符数,单词数和行数的Wc对象。最后打印出来并保存到文件result.txt中。
- package com.jie;
- import java.io.*;
- /**
- * @Author: jie140
- * @Date: 2018/10/20 20:59
- */
- public class StatisticalCount {
- public static Wc basicInfo(String fileName)
- {
- //初始化文件的系数值
- Wc wc=new Wc(0,0,0);
- //当前字符
- char charNow;
- try
- {
- //创建文件并读取
- File filename = new File(fileName);
- InputStreamReader reader = new InputStreamReader(
- new FileInputStream(filename));
- BufferedReader br = new BufferedReader(reader);
- //读取一行的数据
- String line ;
- line = br.readLine();
- //是否分割
- boolean partition=true;
- while (line != null)
- {
- //获取一行中字符长度
- wc.chars+=line.length();
- wc.lines++;
- for(int i=0;i<line.length();i++)
- {
- //当前字符
- charNow=line.charAt(i);
- //分割出单词
- if(partition==true&&charNow!=' '&&charNow!='\t'&&charNow!=','&&charNow!=',')
- {
- wc.words++;
- }
- //分割
- if(charNow==' '||charNow=='\t'||charNow==','||charNow==',')
- {
- partition=true;
- }
- }
- line = br.readLine();
- }
- //加上回车长度
- wc.chars+=wc.lines-1;
- br.close();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- return wc;
- }
- }
三、测试项目
1、等价类划分:
输入 |
有效等价类 |
无效等价类 |
wc.exe -参数 文件 |
参数-c |
除了-c,-w,-l,-o之外的参数输入,错误的文件名 |
参数-l |
参数-w |
参数-o |
正确存在的文件名 |
2、测试:
输入 |
结果 |
wc.exe -c |
作业.txt, char: 37 |
wc.exe -l |
作业.txt, line: 4 |
wc.exe -w |
作业.txt, word: 31 |
wc.exe -c -w |
作业.txt, char: 37 作业.txt, word: 31
|
wc.exe -c -w -o result2.txt |
作业.txt, char: 37 作业.txt, word: 31
|
wc.exe -z |
文件无输出
|
3.测试文件内容

4.执行结果

四、项目总结
该项目主要运用到的思想是 面向对象的思想。
1:通过外部dos命令传入到Main函数中args数组中,通过循环和条件语句进行分功能运行。
2.使用了exe4j之后会弹窗,不能输出控制台语句。
3.调用-c -w -l 的功能中间使用到了大量的IO知识和文件操作,不了解的小伙伴请多参考几篇博客进行知识补充。