WorkCount java简易实现读取文件的字符数,行数,单词数

1.码云地址:

https://gitee.com/zhuyao1/workCount

2.psp表格

PSP2.1表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30

20 

· Estimate

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

 20

10 

Development

开发

 300  

 360

· Analysis

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

 30

 30

· Design Spec

· 生成设计文档

 20    

 30

· Design Review

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

 20 

 10

· Coding Standard

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

 15

 15

· Design

· 具体设计

 20

 15

· Coding

· 具体编码

 200      

 360

· Code Review

· 代码复审

 30

 20

· Test

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

 20

 30

Reporting

报告

 10

 10

· Test Report

· 测试报告

 20  

 10

· Size Measurement

· 计算工作量

20 

 10

· Postmortem & Process Improvement Plan

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

 30

 30

 

合计

 785

 960

 3.需求功能分析

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

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name]

存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

我拿到这个问题一开始想的就是要使用java的io流来读取文件,从而判断文件中的单词数,字符数等。

学习java的文件读取和写入。参考链接:https://blog.csdn.net/linzhiqiang0316/article/details/71744340   或https://blog.csdn.net/malik76/article/details/6408726/

4.程序设计

我总共设计了两个类:

1.程序的功能类,读取文件的字符,字数,行数。

 1 public String count_word(String filename) throws IOException//统计单词数
 2     {
 3             ...
 4     }
 5     
 6     public String count_char(String filename) throws IOException//统计字符数
 7     {
 8         ...
 9  } 10 11 public String count_line(String filename) throws IOException//统计行数 12  { 13  ... 14  } 15 

2.main函数类,主要用于判断用户的命令,还有一个将结果写入文件的方法

1 public static void main(String[] args) throws IOException
2     {
3         
4         ...
5     }
6 public static void output(String result) throws IOException
7  { 8  ... 9 }

5.具体编码(还有很多不足之处,希望各位提出意见)

功能类:

public String count_word(String filename) throws IOException//统计单词数
    {
        int wordnum=0;//单词数
        File file =new File(filename);
        int x=-1;
        FileReader fReader=new FileReader(file);
        while((x=fReader.read())!=-1)//按字符读文件,碰到符合条件的,单词数+1
        {
            char a=(char)x; if(a==' '||a==','||a=='.') { wordnum++; } } String result=filename+",单词数:"+wordnum;//保存结果 fReader.close();//关闭流 return result;//返回结果  } public String count_char(String filename) throws IOException//统计字符数  { int charnum=0;//字符数 File file=new File(filename); int x=-1; FileReader fReader=new FileReader(file); while((x=fReader.read())!=-1)//按字符读文件,判断,符合则字符加一  { char a=(char)x; if(a!='\n'&&a!='\r') { charnum++; } } String result=filename+",字符数:"+charnum;//保存结果 fReader.close();//关闭流 return result;//返回结果  } public String count_line(String filename) throws IOException//统计行数  { int line=0;//行数 File file=new File(filename); BufferedReader bReader;//缓冲区 bReader=new BufferedReader(new FileReader(file)); while(bReader.readLine()!=null)//对文件进行以行为单位读取,不为空则行数加一  { line++; } bReader.close();//关闭流 String result=filename+",行数:"+line;//保存结果 return result;//返回结果 }

main函数类:

public class cMain {
    static String filepath="G:/eclipse/workCount/result.txt";//设置初始的文件输出路径,有-o命令就对其更改
    public static void main(String[] args) throws IOException
    {
        
        workCount wCount=new workCount();//实例化workCount
        
        List<String> comonds=new ArrayList<>();//创建list存储命令,即-c,-o等选项
        List<String> filenames=new ArrayList<>();//创建list存储文件的路径
        for(int i=0;i<args.length;i++)//遍历args,将命令和文件路径分开
        {
            if(args[i].startsWith("-"))
            {
                comonds.add(args[i]);//添加命令
 } else{ filenames.add(args[i]);//添加文件的路径  } } String result="";//存储每一次返回的结果 for(int i=0;i<comonds.size();i++) { if(!comonds.contains("-o"))//判断命令中是否含有-o的命令  { for (int j = 0; j < filenames.size(); j++) { switch (comonds.get(i)) {//判断命令并执行 case "-c": result+=" "+wCount.count_char(filenames.get(j)); break; case "-l": result+=" "+wCount.count_line(filenames.get(j)); break; case "-w": result+=" "+wCount.count_word(filenames.get(j)); break; default: System.out.println("有命令错误"); break; } } output(result);//将结果输出至文件  } else {//有-o的命令,则最后一个文件路径则是想要输出的文件路径 filepath=filenames.get(filenames.size()-1);//对输出文件的路径进行更改 for (int j = 0; j < filenames.size()-1; j++) { switch (comonds.get(i)) {//判断命令并执行 case "-c": result+=" "+wCount.count_char(filenames.get(j)); break; case "-l": result+=" "+wCount.count_line(filenames.get(j)); break; case "-w": result+=" "+wCount.count_word(filenames.get(j)); break; default: System.out.println("有命令错误"); break; } } output(result);//将结果输出至文件  } } } public static void output(String result) throws IOException { File file=new File(filepath);//定义文件 if(!file.exists())//判断文件是否存在,不存在则直接创建新文件  { file.createNewFile(); } FileWriter fileWriter=new FileWriter(file); BufferedWriter bWriter=new BufferedWriter(fileWriter);//放入缓冲层 bWriter.write(result);//写入数据 bWriter.close();//关闭流  } }

6.对程序的基本测试

因为这个程序涉及args【】内的命令操作,在之前都比较陌生,后来参考了相关的文章,学习到了对其中命令的操作。

参考链接:https://www.cnblogs.com/xy-hong/p/7197725.html

比较详细,可以参考!

7.本程序的本机测试

将Java代码打包为jar文件,并转为exe可执行文件的方法,可参考下面的博客:

https://blog.csdn.net/sunkun2013/article/details/13167099(很详细)

 

8.个人项目总结

在这一次的程序设计的过程中,我觉得是收获巨大的,我已开始拿到这个题目,说实话,脑壳痛,不过还是得做嘛,静下心来,一步一步分析,不会就去查,从一个项目之中,不仅学习到的是编程的知识,更多的是如何的一个人学习,在一个项目中你会去翻阅无数的资料,这我觉得才是,真正巨大的收获。这次还涉及到了,git码云的使用,我相信这个在以后的工作中,不一定会用到,但一定能提高我们的能力,自觉性。第一次写博客,写的不好,希望得到建议,谢谢!希望能帮助到人!

猜你喜欢

转载自www.cnblogs.com/ZhuYao1/p/9695768.html