一.Gitee地址:https://gitee.com/zjgss99/WordCount

二.项目分析:

对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

命令格式:

wc.exe [para] <filename> [para] <filename> ... -o <filename>

基础功能:

-c:统计文件中的字符数,不包括换行符;

-w:统计文件中的单词数;

-l:统计文件的行数;

-o:指定输出文件;

三.PSP表格:

PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 15 10
· Estimate · 估计这个任务需要多少时间 15 10
Development 开发 400 660
· Analysis · 需求分析(包括学习新技术) 30 90
· Design Spec · 生成设计文档 30 20
· Design Review · 设计复审(和同事审核设计文档) 10 20
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 5 5
· Design · 具体设计 30 15
· Coding · 具体编码 240 450
· Code Review · 代码复审 40 30
· Test · 测试(自我测试,修改代码,提交修改) 15 30
Reporting 报告 65 35
· Test Report · 测试报告 20 10
· Size Measurement · 计算工作量 15 10
· Postmortem & Process improvement Plan · 事后总结,并提出过程改进计划 30 15 
  合计 480

705

四.解题思路:

项目大致分为三个部分:

1)对用户输入的命令进行判断,读取文件,处理,传递参数给功能处理部分

2)对几种命令对应的功能分别进行实现,接收参数

3)根据命令将输出结果保存到相应的输出文件中

项目构成:

1)主函数:

读取文件,对用户输入的命令分别调用功能处理模块,并对一些异常情况做处理

2)功能处理模块:

对基本功能进行实现,通过主函数传递的参数确定需要输出的输出文件及输出文件需要的内容。

五.代码展示:

1)模块处理方法(通过主方法传递的参数确定输出内容)

import java.io.*;

public class Handle {

    int line = 0;
int word = 0;
int charnum = 0; public void deal(String readPath,String writePath, String flag) {
boolean flagexist = true;
try {
String str = "";
String[] linenum;
File file = new File(readPath);
BufferedReader br = new BufferedReader(new FileReader(readPath));
try {
try {
while ((str = br.readLine()) != null) {
linenum = str.split(",| ");
for (int i = 0; i < linenum.length; i++) {
if (linenum[i] != null)
word++;
}
line++;
charnum += str.length();
}
System.out.println("行数:"+line+ " 单次数:" + word+" 字符数:"+ charnum);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
System.out.println("关闭BufferedReader错误");
}
}
} catch (FileNotFoundException e) {
flagexist = false;
System.out.println("未找到文件.");
}
if(!flagexist){ }
else{
String output = "";
switch (flag){
case "-o":
output = readPath+",字符数:"+charnum;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-w":
output = readPath+",单词数:"+word;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-l":
output = readPath+",行数:"+line;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-c":
output = readPath+",字符数:"+charnum;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
}
}
}
}

2)主方法(对用户的输入命令进行处理并传递给功能处理模块)

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String read = null;
System.out.println("请输入命令(格式:wc.exe [parameter] [input_file_name]):");
try{
String readPath = "file.c";
String writePath = "result.txt";
read = bf.readLine();
// System.out.println(read);
String [] getRead;
getRead = read.split(" ");
if(getRead.length == 3){
if(getRead[0].equals("wc.exe")){
if(getRead[1].equals("-o")){
if(getRead[2].endsWith(".txt")){
Handle handle = new Handle();
writePath = getRead[2];
handle.deal(readPath,writePath,"-o");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-c")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-c");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-w")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-w");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-l")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-l");
}
else {
System.out.println("命令格式输入错误");
}
}
else {
System.out.println("命令格式输入错误");
}
}
else{
System.out.println("可执行文件名输入错误");
}
}
else{
System.out.println("命令输入格式错误.");
}
}catch(Exception e){
e.printStackTrace();
}
}
}

六.测试

正常按格式输入命令

错误的输入

七.参考文献:

java文件操作 https://www.cnblogs.com/xwlych/p/5987022.html

将jar包生成.exe文件 https://blog.csdn.net/u011752272/article/details/80697198

WordCount的更多相关文章

  1. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  2. Hadoop3 在eclipse中访问hadoop并运行WordCount实例

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  3. Eclipse 执行成功的 Hadoop-1.2.1 WordCount 源码

    万事开头难.最近在学习Hadoop,先是搭建各种版本环境,从2.2.0到2.3.0,再到1.2.1,终于都搭起来了,折腾了1周时间,之后开始尝试使用Eclipse编写小demo.仅复制一个现成的Wor ...

  4. 软件工程:Wordcount程序作业

    由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...

  5. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  6. MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段

    WordCount是一个入门的MapReduce程序(从src\examples\org\apache\hadoop\examples粘贴过来的): package org.apache.hadoop ...

  7. 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数

    一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...

  8. eclipse连hadoop2.x运行wordcount 转载

    转载地址:http://my.oschina.net/cjun/blog/475576 一.新建java工程,并且导入hadoop相关jar包 此处可以直接创建mapreduce项目就可以,不用下面折 ...

  9. Hadoop中wordcount程序

    一.测试过程中 输入命令: 首先需要在hadoop集群中添加文件 可以首先进行查看hadoop集群中文件目录 hadoop fs -ls / hadoop fs -ls -R / hadoop fs ...

  10. Hadoop示例程序WordCount详解及实例(转)

    1.图解MapReduce 2.简历过程: Input: Hello World Bye World Hello Hadoop Bye Hadoop Bye Hadoop Hello Hadoop M ...

随机推荐

  1. [Swift]LeetCode706. 设计哈希映射 | Design HashMap

    Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...

  2. [Swift]LeetCode731. 我的日程安排表 II | My Calendar II

    Implement a MyCalendarTwoclass to store your events. A new event can be added if adding the event wi ...

  3. [Swift]LeetCode749. 隔离病毒 | Contain Virus

    A virus is spreading rapidly, and your task is to quarantine the infected area by installing walls. ...

  4. [IOI2007] sails 船帆

    显然答案与杆的顺序无关(按每个高度考虑). 从高到低考虑杆,设此时的状态为\(S\),\(S[i]\)是高度\(i\)的帆的数目,初始全为\(0\),当前杆的高度为\(h\),杆上需要放置的帆的数目为 ...

  5. hdfs创建删除文件和文件夹

    在 hadoop 中,基于 Linux 命令可以给 hdfs 创建文件和文件夹,或者删除文件和文件夹 创建文件的命令为: hadoop fs -touch /file.txt 创建文件夹的命令为: h ...

  6. 【Spark篇】---Spark初始

    一.前述 Spark是基于内存的计算框架,性能要优于Mapreduce,可以实现hadoop生态圈中的多个组件,是一个非常优秀的大数据框架,是Apache的顶级项目.One stack  rule  ...

  7. 『2019/3/19 USACO测试 反思与总结』

    2019/3/8 USACO测试 这是第三次考试了,不过这一次没有上一次考得好,也算是比较失误的,有一道题思路对但是写挂了. 还是看一下试题安排: 题号 试题分组 考察算法 思维难度 代码难度 1 银 ...

  8. 开始使用Filebeat

    认识Beats Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据 ...

  9. 如何为ASP.NET Core的强类型配置对象添加验证

    原文: Adding validation to strongly typed configuration objects in ASP.NET Core 作者: Andrew Lock 译文: La ...

  10. Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    1. 知乎文章图片写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. 找到我们要 ...