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!='	'&&charNow!=','&&charNow!=',')
                        {
                            words++;
                            partition=false;
                        }
                    if(charNow==' '||charNow=='	'||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+="
";
                }
                if(needW)
                {
                    //file1.c, 单词数: 30
                    outputStr+=fileShortName;
                    outputStr+=", word: ";
                    outputStr+=words;
                    outputStr+="
";
                }
                if(needL)
                {
                    //file.c, 行数: 10
                    outputStr+=fileShortName;
                    outputStr+=", line: ";
                    outputStr+=lines;
                    outputStr+="
";
                }
            }
        
            
        }
        
        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); // 
即为换行  
            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还是写入用户给定的文件)

 四.测试设计过程

具体设计的测试用例如下:

测试用例

测试结果

 测试评价

基本功能大体已经实现,测试结果和预想中的一样,效果还不错,比较令人满意。

五:参考文献连接:

1. WordCount by Java

 

 

人生若只如初见,浮沉繁华,慕然回首,不过过眼云烟。 我只在红尘中争渡,即便是一朵浪花,亦奋勇向前。
原文地址:https://www.cnblogs.com/wuhen8866/p/9688604.html