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();
}
}
public static void getBasicInfo(String fileName)
统计指定文件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();
} }
public static void main(String[] args)
通过主方法调用参数,之后,根据参数情况,调用其他方法,将结果写入字符串outputStr;最后将outputStr写入输出文件(根据是否有-o参数,决定是写入默认的restult.txt还是写入用户给定的文件)
四.测试设计过程
具体设计的测试用例如下:
测试用例

测试结果







测试评价
基本功能大体已经实现,测试结果和预想中的一样,效果还不错,比较令人满意。
五:参考文献连接:
WordCount 基础功能的更多相关文章
- 个人项目WordCount基础功能
码云地址:https://gitee.com/stedylan/WordCount 1.PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 1 ...
- wc基础功能
第一次作业 项目地址 https://gitee.com/xxlznb/WordCount PSP WordCount 预估耗时(分钟) 实际耗时 计划 20 30 预估任务需要时间 20 30 开发 ...
- WordCount基本功能
WordCount基本功能 码云地址:https://gitee.com/Joker_zou/WordCount.git 一.项目需求 WordCount的需求可以概括为:对程序设计语言源文件统计字符 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.0,完善基础功能(源码)
(前段时间封闭式开发完了一个项目,最近才有时间继续更新GG的后续版本,对那些关注GG的朋友来说,真的是很抱歉.)GG的前面几个版本开发了一些比较高级的功能,像视频聊天.远程桌面.文件传送.远程磁盘等, ...
- 谷歌Chrome浏览器开发者工具的基础功能
上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要 ...
- Netsharp快速入门(之16) Netsharp基础功能(权限管理)
第5章 Netsharp基础功能 5.1 权限配置 5.1.1 功能权限 1.配置权限功能点,打开平台工具-基础业务-操作管理 2.选择资源节点为销售订单,点添加常用操作,添加完成后 ...
- 李洪强iOS开发之-环信03_集成 SDK 基础功能
李洪强iOS开发之-环信03_集成 SDK 基础功能 集成 SDK 基础功能 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. SDK 同步/异步方法区分 ...
- Keepalived详解(三):Keepalived基础功能应用实例【转】
Keepalived基础功能应用实例: 1.Keepalived基础HA功能演示: 在默认情况下,Keepalived可以实现对系统死机.网络异常及Keepalived本身进行监控,也就是说当系统出现 ...
- jmeter 基础功能详解
jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求, ...
随机推荐
- POJ-3020 Antenna Placement---二分图匹配&最小路径覆盖&建图
题目链接: https://vjudge.net/problem/POJ-3020 题目大意: 一个n*m的方阵 一个雷达可覆盖两个*,一个*可与四周的一个*被覆盖,一个*可被多个雷达覆盖问至少需要多 ...
- 安装gcc,g++
安装gcc.g++ sudo apt-get install make gcc g++ 查看g++版本 g++ --version
- 旧文备份:Python国际化支持
Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现: 在python安装目录下的./Tools/i18n/(windows下例 D:\P ...
- 实战 Lucene2.0
Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家 ...
- Spring框架基础2
Spring框架基础2 测试Spring的AOP思想和注解的使用 导包(在前面的基础上添加) SpringAOP名词解释 AOP编程思想:横向重复代码,纵向抽取:就是说多个地方重复的代码可以抽取出来公 ...
- linux数据库copy方法
相信大多数程序员都会遇到数据库copy的问题,下面就总结几种常见的方法,针对有mysql基础的同学参考 方法一:利用sqlyog的copy database的功能,如图 这种最简单,速度比较慢: 方法 ...
- Ansible工作架构和原理
特性 模块块化调用持定的模块,完成持定任务 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块 支持自定义模块 基于Python语法头现 部署简单,基于python和SSH(默认已 ...
- Struts2之类范围拦截器和方法拦截器
1.Struts2拦截器的体系结构 Struts2拦截器最大的特点是其透明性,即用户感觉不到它的存在,但我们在使用Struts2框架时,拦截器时时刻刻都在帮助我们处理很多事情. 包括: 文件上传 表单 ...
- 一行代码搞定checkbox全选和全不选
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 中缀表达式转后缀表达式(Python实现)
中缀表达式转后缀表达式 中缀表达式转后缀表达式的规则: 1.遇到操作数,直接输出: 2.栈为空时,遇到运算符,入栈: 3.遇到左括号,将其入栈: 4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到 ...