六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Java咖啡館——一個壓縮歸檔實用軟件(3)

[摘要]黃糖故事  設計模式(Design Patterns)  建筑工程師Cristopher Alexander總結了建筑中的經驗教訓,發現有些問題總是一遍又一遍重復出現,當你總結出一套解決這種問題的核心方法以后,你只要放心使用這種解決方法即可,而完全不必再動腦筋想其他的方案。雖然這句話很樸素,但是卻...

    

黃糖故事

  設計模式(Design Patterns)

  建筑工程師Cristopher Alexander總結了建筑中的經驗教訓,發現有些問題總是一遍又一遍重復出現,當你總結出一套解決這種問題的核心方法以后,你只要放心使用這種解決方法即可,而完全不必再動腦筋想其他的方案。雖然這句話很樸素,但是卻成了軟件工程中一種舉足輕重的方法學?設計模式的指導思想。

  我們知道,建筑學有牛頓力學作為辯證的理論根據,只要尊重科學,就不可能設計出坍塌的建筑(即使坍塌,也是材料施工不過關或其他因素造成的)。但是,編寫軟件卻沒有這樣的理論根據,因為程序只是告訴計算機語法,計算機只要如此這般依計而行,愚忠而已,而沒有機制能保證程序的語意符合人類的思想。因此,程序才會有BUG,即使比爾對Windows XP大吼:“我以老祖宗的名義不準你有BUG!”,Windows XP能夠領會精神嗎?

  雖然沒有徹底的解決方法,Erich Gamma等四位大師級的計算機科學家通過借鑒建筑學中的模式的概念,創造出軟件中的設計模式,通過精心萃取的23個模式,有效解決了軟件的設計問題,給程序加上了一定程度的模型語意。具體的,請閱讀這“四人幫”(Gang of Four)編寫的《Design Patterns》一書。值得一提的是,我們上一回編寫的名字解析器就是運用了其中的Factory模式,結構非常漂亮。

  順便說一句,現在支持設計模式的工具也越來越多 ,如果你想有朝一日從Java程序員升級為呼風喚雨的Java構架師,這可是一門必修課哦!

  4.正則表達式(Regular Expression)

  說起正則表達式,即使不熟悉,你也會覺得非常眼熟。沒錯,現在的文本編輯軟件,無論是UltraEdit還是EditPlus,無一不支持正則表達式。可以說,不支持正則表達式的編輯器肯定是三流貨色啦。

  理論上,正則表達式等價于有限自動機,能夠表達相當豐富的語言,DOS中通配符的能力是無法望其項背的。學過編譯原理或者計算機理論的朋友一定很熟悉了,可是,如果從頭開講,恐怕這期所有版面都不夠。因此這里推薦你參考Sun免費的Java Tutorial中的Regular Expressions一章,寫得很詳細。即使你熟悉計算機理論的正則表達式,也建議抽空看一看,因為Java采取的是類Perl風格的語法,和理論書上有些出入。

  比如我們要過濾出所有Java源程序。眾所周知,Java文件名必須以字母、美元符號或者下劃線開頭,然后可以由數字、字母、美元符號或者下劃線的任意組合,最后擴展名是java。用正則表達式寫出來,就是“[a-zA-Z_$][a-zA-Z_$0-9]*\.java”(不含引號)。

  其中,[a-zA-Z_$]表示小寫字母a至z、大寫字母A至Z、美元符號或者下劃線任取其一;[a-zA-Z_$0-9]*表示小寫字母a至z、大寫字母A至Z、美元符號、下劃線以及0至9這十個數字的任意組合;“\.java”表示Java源程序的擴展名,由于“.”在Java正則表達式中有特殊意義,所以“\.”才表示一個“.”符號。

  當然,Java正則表達式API中還有許多擴充,可以簡寫為:[a-zA-Z_$][\w$]*\.java。

  有了這些知識,我們不難寫出支持正則表達式的文件過濾器FileFilter,源代碼如下:

public class FileFilter implements FilenameFilter {
   private Pattern pattern;

   public FileFilter(String regex) {
     pattern = Pattern.compile(regex);
   }

   public boolean accept(File dir, String name) {
     File file = new File(dir + "\\" + name);
     return pattern.matcher(file.getName()).matches() && file.isFile();
   }

}

  Java中通過Pattern類來使用正則表達式。在FileFilter的構造函數中,通過把regex參數傳遞給Pattern的compile()方法,便可以得到一個代表這個正則表達式的實例,之后便可以在accept()方法中調用了。具體地,當且僅當文件名滿足正則表達式并且這的確是一個文件時,accept()方法返回True。

  5.遞歸搜索子目錄

  有了這兩個過濾器,遞歸搜索指定目錄中符合正則表達式的文件名就很容易了。先在項目中生成一個包含main方法的ExpZip類,然后添加一個recursiveAppend(File path, ArrayList list, String regex)方法,其中,參數path是指要搜索的文件夾,list是用來返回符合正則表達式的文件名的列表,regex自然是正則表達式了。源代碼如下:

private static void recursiveAppend(File path, ArrayList list, String regex) {
   // 搜索path文件夾中符合要求的文件并添加到list里。
   File[] files = path.listFiles(new FileFilter(regex));
   if (files.length > 0) {
     for (int i = 0; i < files.length; i++) {
       list.add(files[i].getAbsolutePath());
     }
   }

   // 遞歸搜索path子文件夾。
   File[] subFolders = path.listFiles(new FolderFilter());
   if (subFolders.length > 0) {
     for (int i = 0; i < subFolders.length; i++) {
     recursiveAppend(subFolders[i], list, regex);
     }
   }
}





主站蜘蛛池模板: 天天摸天天干 | 欧美一区二区三区免费观看视频 | 欧美一级黄色片免费看 | 五月天激情在线 | 伊人免费在线观看 | 午夜在线观看福利 | 中文字幕在线观看免费视频 | 天天在线干 | 欧美一欧美一区二三区性 | 欧美又大又粗又长又美 | 日韩亚洲一区中文字幕 | 亚洲欧美日韩国产精品影院 | 青青青久草| 欧美视频在线第一页 | 午夜欧美福利视频 | 永久毛片 | 深夜久久 | 涩涩网页 | 日韩精品一区二区三区中文在线 | 青青操原 | 性感美女视频免费网站午夜 | 天天在线综合网 | 天天做天天爱天天一爽一毛片 | 亚洲第一视频区 | 日本精品久久久久久久 | 日韩视频在线免费观看 | 青草视频在线观看免费网站 | 三级国产精品一区二区 | 欧美在线网址 | 新男人皇宫亚洲男人 | 欧美性视频在线播放黑人 | 香蕉欧美成人精品a∨在线观看 | 特级理论片| 涩涩涩涩涩涩涩涩涩涩 | 人人插人人爽 | 婷婷激情片 | 亚洲国产日产无码精品 | 香蕉免费一区二区三区 | 欧美丝袜一区 | 青草久久精品 | 亚欧成人乱码一区二区 |