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