word count

码云:https://gitee.com/xinlier/git_wc

1.项目要求:

实现对文件内容的单词、字符、行数的统计,并将结果输出到文件中,可以是用户指定的输入文件,也可以是程序自动生成的默认文件result,并且result和wc.exe同级

2.基本功能:

wc.exe [选项...] [需要统计的文件名]或者wc.exe [选项...] [需要统计的文件名] [-o] [存放结果的文件名]

eg:wc.exe -c file.txt

eg:wc.exe -c -l  -w file1.txt -o file2.txt

注意:第一个选项只能输入:-c(统计字符数)、-l(统计行数)、-w(统计单词数)。如果要将结果输入到指定的文件,使用命令选项-o,并且后面跟文件名,注意-o命令不能单独使用。

可以在参数一的位置上输入多个选项以统计不同的数据,如:wc.exe -c -l -w file.txt

空格、水平制表符、换行符,均算字符,由空格或者逗号分隔开的都视为单词,并且不做单词的有效性检测,如sdaf@ 算一个单词

3.基本功能:

1.-c   文件名:统计文件字符数

2.-w  文件名:统计文件单词书

3. -l   文件名:统计文件行数

4.-o   文件名:将结果输出到指定文件中

4.psp开发表格

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 600

 1200

· Estimate

· 估计这个任务需要多少时间

 240

 1200

Development

开发

 120

 240

· Analysis

· 需求分析(包括学习新技术)

 30

 20

· Design Spec

· 生成设计文档

 60

 120

· Design Review

· 设计复审(和同事审核设计文档)

 20

 10

· Coding Standard

· 代码规范(为目前的开发制定合适的规范)

 30

 50

· Design

· 具体设计

 60

 120

· Coding

· 具体编码

 240

 300

· Code Review

· 代码复审

 60

 100

· Test

· 测试(自我测试,修改代码,提交修改)

 10

 50

Reporting

报告

 120

 60

· Test Report

· 测试报告

 30

 30

· Size Measurement

· 计算工作量

 600

 1200

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 120

 150

 

合计

 2310

 4840

 

5.表格分析:

从表格看,预估时间和实际开发时间相差很大,导致这个结果的原因在于开发者经验不足,并且没有实际深入的研究开发所需要的时间,所以在之后的开发中就应该注意这些文题

6.设计思路:

   1.首先结合用户的需求设计需要实现的功能,并且结合实际选择开发语言。

   2.设计类图,搭好程序的框架,并且分析这样的设计效率高不高。如果可行,就开始具体的编码。

   3.程序分为4个类:

           1.start:用与启动程序

           2.getUserInpu:用来得到用户的输入,粗略判断输入是否合法,返回输入

           3.PrintToFile:创建文件、将统计结果输出到文件中

           4.getFile:检测输入合法性、统计数据        

    4.运行截图:

 

 

 

 

 

 

 

 

 

 

7.部分代码

 1 package wc;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.util.ArrayList;
 8 
 9 public class GetFile {
10     public void getFile(String[] input) throws IOException {
11         int charNum = 0;
12         int wordsNum = 0;
13         int lineNum = 0;
14         boolean iso = false;//judege if there is the choice "-o";
15         PrintToFile printToFile = new PrintToFile(); // 创建printtofile对象
16         String partOfUrl = "/Users/macbook/";
17         ArrayList<String> fileName = new ArrayList<String>();    //将用户输入的文件名装入集合中
18         ArrayList<String> Choice = new ArrayList<String>(); // 将用户的选项存入这个list集合
19         for (String cell : input) {
20             if (cell.startsWith("-")) {
21                 Choice.add(cell);
22             } else if (cell.endsWith(".c") || cell.endsWith(".txt") || cell.endsWith(".docx")) {
23                 fileName.add(cell);//将相应的文件装入list中
24             } else {
25                 System.out.println("输入格式不对");
26                 System.exit(1);
27             }
28         }
29         if (fileName.size() == 0) {
30             System.out.println("没有输入文件名");
31             System.exit(1);
32         }
33         String fileUrl = partOfUrl + fileName.get(0); // 得到完整的文件路径,filename(0)是要统计的文件
34         String result = null;//用于存储结果
35         InputStreamReader isr = new InputStreamReader(new FileInputStream(fileUrl));// 获得文件内容
36         BufferedReader br = new BufferedReader(isr);
37         while (br.read() != -1) {
38             String s = br.readLine();
39             charNum += s.length();
40             wordsNum += s.split(" ").length;
41             lineNum++;
42         }
43         // 首先判断用户的输入中有没有-o选项
44         for (String choice : Choice) {
45             if(choice.equals("-o")&&fileName.size()!=2) {
46                 System.out.println("输入格式不对");
47                 System.exit(1);
48             }
49             if (choice.equals("-o") && fileName.size() == 2) {// 首先调用createFile(String fileName)再调用OutputToUserFile(String result)
50                 iso = true;                                    
51                 String path = printToFile.createFile(fileName.get(1));// 创建用户指定文件,并且得到文件路径
52                 for (String ch : Choice) {
53                     if (ch.equals("-c")) {
54                         result = fileName.get(0)+",字符数:" + String.valueOf(charNum);
55                         System.out.println(result);
56                         printToFile.OutputToUserFile(result, path);
57                     } else if (ch.equals("-w")) {
58                         result = fileName.get(0)+",单词数:" + String.valueOf(wordsNum);
59                         System.out.println(result);
60                         printToFile.OutputToUserFile(result, path);
61                     } else if (ch.equals("-l")) {
62                         result = fileName.get(0)+",行数:" + String.valueOf(lineNum);
63                         System.out.println(result);
64                         printToFile.OutputToUserFile(result, path);
65                     } 
66                 }
67             } 
68         }
69             if(iso==false) {
70                         for (String choose : Choice) {
71                             if (choose.equals("-c")) {// 输出字符数
72                                 result = fileName.get(0)+"字符数:" + String.valueOf(charNum);
73                                 System.out.println(result);
74                                 printToFile.outPutToFile(result);
75                             } else if (choose.equals("-w")) {// 输出单词数
76                                 result = fileName.get(0)+",单词数:" + String.valueOf(wordsNum);
77                                 System.out.println(result);
78                                 printToFile.outPutToFile(result);
79                             } else if (choose.equals("-l")) {// 输出行数
80                                 result = fileName.get(0)+",行数:" + String.valueOf(lineNum);
81                                 System.out.println(result);
82                                 printToFile.outPutToFile(result);
83                             } else {
84                                 System.out.println("输入格式不正确");
85                                 System.exit(1);
86                             }
87                         }
88             }
89             br.close();// 关闭输出流对象
90         }
91 
92     }
package wc;

import java.util.Scanner;

public class getUserInput {
    public String[] getInput() {// 从命令行获取用户的输入,将输入切分为几个目标字符串,并做输入长度判断
        Scanner scan = new Scanner(System.in);
        String getInput = null;//获得用户输入的变量
        while (getInput == null) {
            getInput = scan.nextLine();// 读取一行的输入,并且检测是否有输入
        }
        String[] input = getInput.split(" "); // 将用户的输入切分成各个目标字符串
        if(input.length>6||input.length<2) {//输入长度判断
            System.out.println("非法输入");
            System.exit(1);
        }
        scan.close();
        return input;
    }
}
package wc;

import java.io.File;

import java.io.FileWriter;
import java.io.IOException;

public class PrintToFile {
    public void outPutToFile(String str) throws IOException {// 将用户的输入写入文件中
        PrintToFile own = new PrintToFile();
        String filePath = null;
        filePath = own.createFile("result.txt");
        File file = new File(filePath);
        boolean isFile = file.exists();//检测文件是否存在
        if (isFile == false) {//文件不存在则创建一个新的名为result.txt的文件
            file.createNewFile();
        }
        FileWriter fw = new FileWriter(filePath,true);//以追加的方式写入文件
        fw.write(str+"\n");
        fw.close();
        /*PrintWriter outPut = new PrintWriter(file);
        outPut.print(str);//重写的方式写入文件中
        outPut.close();*/
    }
    public void OutputToUserFile(String result,String path) throws IOException {//将结果写入用户指定的文件中
      File file = new File(path);
      FileWriter fw = new FileWriter(file);
      fw.write(result+"\n");
      fw.close();
    }
    public String createFile(String fileName) throws IOException{//创建用户指定文件
        File directory = new File(".");
        String Path = directory.getCanonicalPath();
        String filePath = Path+"/"+fileName;
        File file = new File(filePath);
        if(file.exists()==false) {//if the file don't exist,then create  
            file.createNewFile();        
        }
        return filePath;
    }
}
package wc;

public class Start {

    public static void main(String[] args) throws Exception {

        // String path="/Users/macbook/hello.c";
        getUserInput getStr = new getUserInput();
        String[] input = getStr.getInput();// 得到用户的输入
            GetFile getfile = new GetFile();
            getfile.getFile(input);//调用文件操作类
        
    }
}

8.总结

   首先,感谢老师布置的这次作业,这次作业有很多地方是需要我去学习的,并且通过这个作业我了解到了很多东西,学到很多新的知识。在一开始做这个作业的时候就觉得没有什么难的东西,通过编码实现了基本的功能。但是之后才发现,编码仅仅是这次作业的一小部分,而且并不是最消耗时间的。这次作业需要学习git,学习怎样用git去管理项目。然后花了很多时间去学git,刚开始学的时候简直让人摸不着头脑,最好笑的是我连git是什么都不知道,张什么养也不知道,因为以前没有听说过。然后就觉得这个东西很难,不过随着学习的深入了解了git,并掌握了git的基础的用法。突然感觉打开了一个前所未有的天地,觉得还有git这么神奇的东西。但是在学习的过程中遇到了很多的麻烦,这些麻烦都是和棘手的,第一不知道怎样去描述问题来查阅相关资来,第二不知道问题出在哪里,对于这些完全就是陌生的。就像电箱坏了,要查处坏的地方,但是打不开电箱并且不了解电箱一样的难受。好在通过分析和耐心理理清了解决问题的思路。最后完成了git这一块。但是问题又来了,怎样去打包java项目,并且做成exe文件。查阅了相关资料后,费了半天的时间才学会将打包成exe文件。就这样,这次作业终于做完,有一种前所未有的成就感,因为在这次作业上面花费了太多的时间和太多的精力。总的来说,通过这次作业收获非常大,学到的东西非常,也懂了个人开发程序的基本流程。

引用:

exe4j教程:https://blog.csdn.net/sunkun2013/article/details/13167099

 

posted @ 2018-09-30 22:27  Kyrie_xrj  阅读(195)  评论(1编辑  收藏  举报