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碼雲的使用,我相信這個在以后的工作中,不一定會用到,但一定能提高我們的能力,自覺性。第一次寫博客,寫的不好,希望得到建議,謝謝!希望能幫助到人!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM