WordCount 基础功能
软测第一次作业
该项目在码云上的地址:
https://gitee.com/zhege/WordCount
一,概述
WordCount的基础功能需求分析大致如下:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中。
详细可参考网址:
https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2120
该项目的psp表格如下:
二.解题思路
1.使用idea
使用IDEA的编译器创建一个单纯的java的项目(IDEA的使用及配置)
2.利用java读写文件(IO流的使用)
使用java IO流,来对文件进行操作
import java.io.File; import java.io.InputStreamReader; import java.util.ArrayList; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException;
3.如何给主方法添加参数,并通过逻辑达到要求
//主方法 public static void main(String[] args) { for(int i=0;i<args.length;i++) { //...... } //...... return 0; }
4.如何将java程序打包成exe文件
1)IDEA将java导出可运行的jar包
参考:https://www.cnblogs.com/blog5277/p/5920560.html
2)将jar变成exe文件
参考:https://blog.csdn.net/sunkun2013/article/details/13167099
三.程序设计实现过程
这是WordCount的基础功能,代码量较少,只用了一个class.
下面是属性和方法代码
属性
String inputFile; //用户输入的文件路径 String outputFile; //输出信息的文件名 int chars; //字符数 int words; //单词数 int lines; //行数 boolean needC; //输入参数中是否有“-c” boolean needW; //输入参数中是否有“-w” boolean needL; //输入参数中是否有“-l” boolean needO; //输入参数中是否有“-o”
方法
public static void getBasicInfo(String fileName) { //_____________________变量声明____________________ chars=0; words=0; lines=0; //统计单词用的变量 boolean partition=true; char charNow; try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw File filename = new File(fileName); // 要读取该路径的文件 InputStreamReader reader = new InputStreamReader( new FileInputStream(filename)); // 建立一个输入流对象reader BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言 String line ; line = br.readLine(); while (line != null) { //——————————————————————统计行数和字符数__________ chars+=line.length(); lines++; //_______________________打印该行行号和内容 // System.out.print(lines); // System.out.print(" "); // System.out.print(line); //________________________统计单词_____________________________ partition=true; for(int i=0;i<line.length();i++) { charNow=line.charAt(i); if(partition==true&&charNow!=' '&&charNow!='\t'&&charNow!=','&&charNow!=',') { words++; partition=false; } if(charNow==' '||charNow=='\t'||charNow==','||charNow==',') { partition=true; } } //----------------------------------------------------------------- line = br.readLine(); // 读取下一行数据 } chars+=lines-1; //由于换行符也算做字符,故如此 br.close(); } catch (IOException e) { e.printStackTrace(); } }
统计指定文件FileName的基本数据:字符数、单词数、行数。
public static void main(String[] args) { // inputFile=""; for(int i=0;i<args.length;i++) { if ("-c".equals(args[i])) { needC = true; } else if ("-w".equals(args[i])) { needW = true; } else if ("-l".equals(args[i])) { needL = true; } else if ("-o".equals(args[i])) { needO = true; outputFile = args[i + 1]; } else { if (!args[i - 1].equals("-e") && !args[i - 1].equals("-o")) { inputFile = args[i]; } } } //根据参数情况,生成输出结果字符串 String outputStr=""; ArrayList<String> fileNames =new ArrayList<String>();//要统计的文件名们 if(!needS) { fileNames.add(inputFile); } else { s(fileNames); } int len=fileNames.size(); String fn; for(int i=0;i<len;i++) { fn=fileNames.get(i); //对于每一个要统计的文件 //System.out.println(fn); String fileShortName=fn.substring(fn.lastIndexOf("\\")+1, fn.length()); //基本信息 if(needC||needW||needL) { //统计基本信息 getBasicInfo(fn); //将基本信息写结果字符串 if(needC) { //file.c, 字符数: 50 outputStr+=fileShortName; outputStr+=", char: "; outputStr+=chars; outputStr+="\r\n"; } if(needW) { //file1.c, 单词数: 30 outputStr+=fileShortName; outputStr+=", word: "; outputStr+=words; outputStr+="\r\n"; } if(needL) { //file.c, 行数: 10 outputStr+=fileShortName; outputStr+=", line: "; outputStr+=lines; outputStr+="\r\n"; } } } System.out.println(outputStr); //写入文件 if(!needO) { outputFile="result.txt"; } try { File writename = new File(outputFile); // 如果没有则要建立一个新的output。txt文件 writename.createNewFile(); // 创建新文件 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write(outputStr); // \r\n即为换行 out.flush(); // 把缓存区内容压入文件 out.close(); // 最后记得关闭文件 //System.out.println("already written the output.txt"); } catch (IOException e) { e.printStackTrace(); } }
通过主方法调用参数,之后,根据参数情况,调用其他方法,将结果写入字符串outputStr;最后将outputStr写入输出文件(根据是否有-o参数,决定是写入默认的restult.txt还是写入用户给定的文件)
四.测试设计过程
具体设计的测试用例如下:
测试用例
测试结果
测试评价
基本功能大体已经实现,测试结果和预想中的一样,效果还不错,比较令人满意。
五:参考文献连接:
人生若只如初见,浮沉繁华,慕然回首,不过过眼云烟。
我只在红尘中争渡,即便是一朵浪花,亦奋勇向前。