一..需求說明
1.基本需求
輸入:txt檔案
輸出:將txt檔案中的字元數、單詞數、行數,統計結果以指定格式輸出到預設檔案
2.輸入輸出以及計算規定
wc.exe -c file.c 返回檔案 file.c 的字元數wc.exe -w file.c
wc.exe -w file.c 返回檔案 file.c 的單詞總數
wc.exe -l file.c 返回檔案 file.c 的總行數
wc.exe -o outputFile.txt //將結果輸出到指定檔案outputFile.txt
空格,水平製表符,換行符,均算字元。
由空格或逗號分割開的都視為單詞,且不做單詞的有效性校驗,例如:thi#,that視為用逗號隔開的2個單詞。
-c, -w, -l引數可以共用同一個輸入檔案,形如:wc.exe –w –c file.c 。
-o 必須與檔名同時使用,且輸出檔案必須緊跟在-o引數後面,不允許單獨使用-o引數。
3.PSP
PSP2.1 |
PSP階段 |
預估耗時 (分鐘) |
實際耗時 (分鐘) |
Planning |
計劃 |
400 |
|
· Estimate |
· 估計這個任務需要多少時間 |
350 |
|
Development |
開發 |
50 |
60 |
· Analysis |
· 需求分析 (包括學習新技術) |
40 |
90 |
· Design Spec |
· 生成設計文件 |
30 |
60 |
· Design Review |
· 設計複審 (和同事稽核設計文件) |
30 |
30 |
· Coding Standard |
· 程式碼規範 (為目前的開發制定合適的規範) |
20 |
30 |
· Design |
· 具體設計 |
30 |
40 |
· Coding |
· 具體編碼 |
60 |
120 |
· Code Review |
· 程式碼複審 |
30 |
20 |
· Test |
· 測試(自我測試,修改程式碼,提交修改) |
40 |
60 |
Reporting |
報告 |
20 |
80 |
· Test Report |
· 測試報告 |
20 |
0 |
· Size Measurement |
· 計算工作量 |
370 |
|
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出過程改進計劃 |
30 |
|
|
合計 |
400 |
590 |
4.思路
通過java的輸入輸出流讀寫檔案,遍歷檔案中的每一個字元判斷其中的空格數,換行健,逗號,分好的數目來統計。
5.類
1.Util 工具包類提供檔案的讀寫
2.WordCount類 判斷檔案中的字元數,行數,單詞數
3.CountPrintl類 將結果列印到指定的檔案中
4.Test類 單元測試類
5.Client 客戶端
5.關鍵程式碼
package Util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; public class WDUtil { //工具類 負責讀寫工具 /*讀取檔案 * FilePath 檔案的路徑 * 返回 StringBuffer */ public String fielRead(String FilePath) { File file=new File(FilePath); StringBuffer sb=new StringBuffer(); try { FileInputStream fis=new FileInputStream(file); InputStreamReader reader = new InputStreamReader(fis, "UTF-8"); while(reader.ready()) { sb.append((char)reader.read()); } reader.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } /* * FilePath 儲存檔案的路徑 * txt 儲存的內容 */ public void fileWrite(String FilePath,String txt) { File file=new File(FilePath); try { FileOutputStream fop=new FileOutputStream(file); OutputStreamWriter writer =new OutputStreamWriter(fop, "utf-8"); writer.write(txt); writer.close(); fop.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package CountWord; import Util.WDUtil; public class CountWord { WDUtil util = new WDUtil();// 讀寫檔案的工具物件 /* * path 檔案的路徑 返回檔案的總字數 */ public int countChar(String path) { int charNum = 0; String words = util.fielRead(path); charNum = words.length(); return charNum; } /* * path 檔案的位置 返回檔案中空格的數目 */ public int countWord(String path) { int wordNum = 0; String words = util.fielRead(path); for (int i = 0; i < words.length() - 1; i++)// 最後一個字母特殊考慮 { if (words.charAt(i) == ' ' || words.charAt(i) == ';' || words.charAt(i) == ',' || words.charAt(i) == '.')// 出現空格逗號句號分號都算一個單詞 { wordNum++; } } wordNum++;// 最後一個不管是什麼字母結尾,單詞數都加1 return wordNum; } public int countEnter(String path) { int wordNum = 0; String words = util.fielRead(path); for (int i = 0; i < words.length(); i++) { if (words.charAt(i) == '\n') { wordNum++; } } return wordNum + 1; } }
package CountWord; import java.util.Scanner; import Util.WDUtil; /* * 根據輸入的命令獲取操作,和檔案路徑最後計算結果儲存到路徑中 */ public class PrintfCount { CountWord cWord=new CountWord(); WDUtil wdUtil=new WDUtil(); int charNum=0;//字元的數目 int wordNum=0;//單詞的 int enterNum=0;//行數 public void Print(String[] args) { String txt=null; String path=args[args.length-1]; for(int i=0;i<args.length;i++) { String operation=args[i]; switch(operation) { case "-c": //計算字元數 { charNum=cWord.countChar(path); System.out.println("字元數為:"+charNum); break; } case "-w": //計算單詞數 { wordNum=cWord.countWord(path); System.out.println("單詞數為:"+wordNum); break; } case "-l": //計算行數 { enterNum=cWord.countEnter(path); System.out.println("行數為:"+enterNum); break; } case "-o": { String result=wdUtil.fielRead("result.txt"); wdUtil.fileWrite(args[i+1],result); break; } } } txt="字元的個數為"+charNum+"\n單詞的個數為"+wordNum+"\n行數為"+enterNum; wdUtil.fileWrite("result.txt", txt); } }
測試總結:1.我不知道table在計算的時候是算一個字元還是多少個,我電腦上算的3個
2.在計算單詞時我覺得以分號,逗號,句號,空格結尾都應該算一個單詞
3.在文章結尾應當預設增加一個單詞
7.相關連結
有關部落格的使用和排版,:http://www.cnblogs.com/math/p/se-tools-001.html。
有關Git的使用,廖雪峰的官方網站。
8.最後
非常感謝老師給我們的引導,我一直知道git很神奇也很好用。但是迫於害怕和沒有機會,一直沒有實踐過,謝謝老師給我的資料和實踐的機會。本次部落格寫的有點匆忙,有不足之處請多多指教。