posts - 262,  comments - 221,  trackbacks - 0
          J2SE
          【Java基礎專題】IO與文件讀寫---優化搜索程序(01)      摘要: Apache commons CLI是一個開源的,用于處理命令行的工具包。這個包目前的穩定版本是1.2,他非常簡單只有20個左右的class,但提供了幾乎所以可以用到的命令行功能。它的主頁在這里:Apache commons CLI

          根據CLI的邏輯,每一個命令行的處理都可以分為3個步驟:定義、解析、交互
          ①定義:定義命令行的各種選項屬性(包括縮寫、全寫、是否必須、是否帶參數、參數個數限制)
          ②解析:使用解析器對命令行選項列表進行解析
          ③交互:從解析好的命令行查詢用戶輸入的參數值并進行處理  閱讀全文
          posted @ 2010-04-02 14:20 Paul Lin 閱讀(1080) | 評論 (0)  編輯
          【Java基礎專題】IO與文件讀寫---DirectoryWalker和FileFilter的復雜條件使用      摘要: 1.基本功能過濾器
          =============================================
          ①類型:DirectoryFileFilter、FileFileFilter
          ②大小:EmptyFileFilter、SizeFileFilter
          ③時間:AgeFileFilter
          ④名稱:NameFileFilter、PrefixFileFilter、SuffixFileFilter、RegexFileFilter、WildcardFileFilter
          ⑤讀寫屬性:CanReadFileFilter、CanWriteFileFilter
          ⑥隱藏屬性:HiddenFileFilter

          2.邏輯關系過濾器
          =============================================
          ①邏輯與:AndFileFilter
          ②邏輯或:OrFileFilter
          ③邏輯非:NotFileFilter
          ④永真/假:TrueFileFilter、FalseFil  閱讀全文
          posted @ 2010-04-01 17:52 Paul Lin 閱讀(3174) | 評論 (1)  編輯
          【Java基礎專題】IO與文件讀寫---使用DirectoryWalker和FileFilterUtils進行搜索      摘要: Apache commons IO包中提供了一個可以遍歷目錄下資源的DirectoryWalker,還有很多的IOFileFilter用于過濾文件目錄。下面的例子分別演示了這個功能。

          這兩個搜索類都是以內部類的方式嵌入客戶端的,客戶端接收客戶的參數,然后通過一個后臺線程來進行搜索,等待子線程完成搜索后(join方法),再打印搜索結果。

          注意這個過程是可以被cancel的。cancel主要有2種情況。外部cancel:外部線程通過調用內部類的cancel()方法。內部cancel:在handleDirectory、handleFile中主動拋出CancelException。

          walk方法在每次執行前、后都會檢查當前是否有cancel指令發出(checkIfCancelled ---> handleIsCancelled),如果有那么默認立刻拋出CancelException,然后調用handleCancelled方法。  閱讀全文
          posted @ 2010-03-31 23:45 Paul Lin 閱讀(2578) | 評論 (1)  編輯
          【Java基礎專題】IO與文件讀寫---對同步/異步和阻塞/非阻塞的理解      摘要: ①同步的操作,如果在等待的過程不能做別的事情,它是同步+阻塞的。這個也是最常見的
          ②同步的操作,如果在等待的過程可以做別的事情,它是同步+非阻塞的。
          ③異步的操作,如果在等待的過程不能做別的事情,它是異步+阻塞的。
          ④異步的操作,如果在等待的過程可以做別的事情,它是異步+非阻塞的。這個也是最常見的  閱讀全文
          posted @ 2010-03-10 15:36 Paul Lin 閱讀(2797) | 評論 (2)  編輯
          【Java基礎專題】IO與文件讀寫---同步/異步與阻塞/非阻塞的區別(轉)      摘要: 同步/異步:消息通知機制。是自己主動關注消息還是靠別人通知
          阻塞/非阻塞:消息處理機制。等待消息處理完成的過程能否做別的事情  閱讀全文
          posted @ 2010-03-10 14:54 Paul Lin 閱讀(2642) | 評論 (0)  編輯
          【Java基礎專題】IO與文件讀寫---使用Apache commons IO包進行資源遍歷      摘要: 要使用DirectoryWalker來遍歷一個目錄并進行相應的操作,步驟如下:

          ①創建一個繼續于DirectoryWalker的類,并在構造方法中調用super();
          ②定義一個業務入口方法,例如clean。在這個方法中調用walk方法
          ③覆蓋DirectoryWalker類的handleDirectory方法,提供相應的處理邏輯
          ④覆蓋DirectoryWalker類的handleFile方法,提供相應的處理邏輯  閱讀全文
          posted @ 2010-03-09 00:26 Paul Lin 閱讀(3539) | 評論 (1)  編輯
          【Java基礎專題】IO與文件讀寫---使用Apache commons IO過濾文件和目錄      摘要: 它們可以分為兩大類:
          ①實質性過濾器:例如針對文件的類型,屬性,名稱,大小進行過濾的過濾器
          ②過濾器連接器:典型的包括AndFileFilter、OrFileFilter。用于邏輯連接多個過濾器  閱讀全文
          posted @ 2010-03-09 00:02 Paul Lin 閱讀(1364) | 評論 (0)  編輯
          【Java基礎專題】IO與文件讀寫---使用Apache commons IO簡化文件讀寫      摘要: FileUtils總體上來說,主要功能有:
          ※ 資源的創建、刪除
          ※ 資源的復制、移動
          ※ 資源的讀寫
          ※ 資源的比較
          ※ 資源的過濾
          ※ 資源的轉換  閱讀全文
          posted @ 2010-03-08 15:07 Paul Lin 閱讀(6594) | 評論 (1)  編輯
          【Java基礎專題】IO與文件讀寫---使用Apache commons IO包規范文件名      摘要: 使用Apache commons IO包規范文件名  閱讀全文
          posted @ 2010-03-08 10:56 Paul Lin 閱讀(858) | 評論 (0)  編輯
          【Java基礎專題】IO與文件讀寫---使用Apache commons io包提高讀寫效率      摘要: 本文通過對Apache commons io包的input,output子類的源代碼研究,來揭示為什么使用commons IO包會在性能上由于JDK自帶的IO類。

          特別是輸出流方面  閱讀全文
          posted @ 2010-03-04 10:28 Paul Lin 閱讀(5660) | 評論 (0)  編輯
          【Java基礎專題】IO與文件讀寫---Java的IO流架構      摘要: 使用圖例全面展示Java中IO的架構,特別是節點流和過濾流及其之間的轉換  閱讀全文
          posted @ 2010-03-02 09:47 Paul Lin 閱讀(4352) | 評論 (3)  編輯
          【Java基礎專題】編碼與亂碼(08)---JavaEE防止中文亂碼的設置      摘要: 良好的編程習慣,對編碼和數據傳輸流程的清晰認識,規范的配置是確保JavaEE應用不會出現亂碼的三大法寶  閱讀全文
          posted @ 2010-02-24 10:25 Paul Lin 閱讀(4345) | 評論 (1)  編輯
          【Java基礎專題】編碼與亂碼(07)---native2ascii命令的用法      摘要: 可以看到該命令對于英文字符,數字不會轉換而是直接輸出,而對于每個中文字符則轉換成以\u開頭的4個16進制數字。

          通常情況下,如果要進行字符的逆轉換,-encoding encoding_name這個參數都會配合-reverse出現。在上面的例子中因為本地系統是中文操作系統,所以即便沒有指定-encoding也可以正確地從unicode ---》GBK。如果是在英文平臺下由于默認字符集是ISO-8859-1,那么這個時候如果不指定則轉換出來的將是?了。  閱讀全文
          posted @ 2010-02-23 18:41 Paul Lin 閱讀(895) | 評論 (0)  編輯
          【Java基礎專題】編碼與亂碼(06)---字符的各種值轉換      摘要: 可以看到在Java中,字符的unicode有兩種表示顯示:一種是10進制形式,一種是16進制形式。它們可以分別通過:int i = (int)(string.charAt(i))和Integer.toHexString(i);獲得。而且在java文件和Web頁面,同一個unicode的表示形式是不同。web頁面需要用&#進行轉義,在java文件中則使用\u進行轉義。  閱讀全文
          posted @ 2010-02-23 16:48 Paul Lin 閱讀(2129) | 評論 (2)  編輯
          【Java基礎專題】編碼與亂碼(05)---GBK與UTF-8之間的轉換      摘要: 在這個專題的第一篇文章【Java基礎專題】編碼與亂碼(01)---編碼基礎 開頭,我們就已經介紹了這個規則:
          ①得到每個字符的2進制GBK編碼
          ②將該16進制的GBK編碼轉換成2進制的字符串(2個字節)
          ③分別在字符串的首位插入110,在第9位插入10,在第17位插入10三個字符串,得到3個字節
          ④將這3個字節分別轉換成16進制編碼,得到最終的UTF-8編碼。  閱讀全文
          posted @ 2010-02-22 23:00 Paul Lin 閱讀(37060) | 評論 (11)  編輯
          【Java基礎專題】編碼與亂碼(04)---輸出時的編碼與亂碼      摘要: 謹慎地使用getBytes(NAME_OF_CHARSET)和new String(bytes, NAME_OF_CHARSET),除非你很清楚的知道原始的字符編碼和傳輸協議使用的編碼。

          推薦使用基于服務器的配置、過濾器設置request/response的characterEncoding、content type屬性。還有就是JSP頁面的pageEncoding屬性、HTML meta元素的content type屬性。盡量避免頻繁的在代碼中進行字符串轉碼,即降低了效率又增加了風險  閱讀全文
          posted @ 2010-02-22 17:39 Paul Lin 閱讀(3050) | 評論 (4)  編輯
          【Java基礎專題】編碼與亂碼(03)----String的toCharArray()方法      摘要: 這個方法再次證明了String的getBytes()方法的危險性,如果我們使用new String(str.getBytes(), encoding)對字符串進行重新編碼解碼時,我們一定要清楚str.getBytes()方法返回的字節數組的長度、內容到底是什么,因為在接下來使用新的encoding進行編碼解碼時,Java并不會自動地對字節數組進行擴展以適應新的encoding。而是按照新的編碼方法直接對該字節數組進行解析。

          于是結果就像上面的例子一樣,同樣是4個原始字節,有些每2個一組進行解析,有些每個一組進行解析,有些每3個一組進行解析。其結果就只能看那種編碼方式合適了。  閱讀全文
          posted @ 2010-02-22 17:18 Paul Lin 閱讀(7121) | 評論 (2)  編輯
          【Java基礎專題】編碼與亂碼(02)---String的getBytes([encoding])方法      摘要: 不要輕易地使用或濫用String類的getBytes(encoding)方法,更要盡量避免使用getBytes()方法。因為這個方法是平臺依賴的,在平臺不可預知的情況下完全可能得到不同的結果。如果一定要進行字節編碼,則用戶要確保encoding的方法就是當初字符串輸入時的encoding。  閱讀全文
          posted @ 2010-02-22 16:53 Paul Lin 閱讀(4610) | 評論 (1)  編輯
          【Java基礎專題】編碼與亂碼(01)---編碼基礎      摘要: Unicode到UTF-8的轉換:Unicode的16進制編碼<-->對應的2進制編碼<-->UTF-8規范的2進制編碼<-->UTF-8規范的16進制編碼

          也就是說,假如我們需要從磁盤文件、數據庫記錄、網絡傳輸一些字符,保存到Java的變量中,要經歷由bytes-->encode字符-->Unicode字符的轉換(例如new String(bytes, encode));而要把Java變量保存到文件、數據庫或者通過網絡傳輸,系統要做一個Unicode字符-->encode字符-->bytes的轉換(例如String.getBytes([encode]))  閱讀全文
          posted @ 2010-02-16 23:23 Paul Lin 閱讀(3693) | 評論 (3)  編輯
          【原】RSS工具開發手記(14)---Informa的exporters包      摘要: Informa不僅提供了對不同版本的RSS Feed source的讀入和解析,同樣也提供了將channel object導出為不同協議版本的XML文件的功能。這個功能是通過exporters包下的各個導出類來完成的。目前僅支持對RSS協議的導出,不支持Atom協議、OPML協議的導出。  閱讀全文
          posted @ 2010-01-04 10:15 Paul Lin 閱讀(414) | 評論 (0)  編輯
          【原】RSS工具開發手記(13)---Informa的parsers包      摘要: OPML(Outline Processor Markup Language)協議正是用于解決這樣問題的。利用OPML協議,我們可以通過閱讀器把已經訂閱的頻道導出為OPML協議規定的格式,從而作為
          一個文件分享出去。  閱讀全文
          posted @ 2010-01-02 20:56 Paul Lin 閱讀(350) | 評論 (0)  編輯
          【原】RSS工具開發手記(12)---Informa的parsers包      摘要: 可以看到,對于這個解析過程,一般的步驟就是:
          A.獲取channnel下的某個子節點元素
          B.如果該子節點元素有子元素或屬性,則繼續遞歸訪問
          C.調用該channnel子元素的createXxx方法加載或創建該子元素
          D.調用Channel的setXxx方法添加該子元素到channel實例中  閱讀全文
          posted @ 2009-12-30 10:45 Paul Lin 閱讀(257) | 評論 (0)  編輯
          【原】RSS工具開發手記(11)---Informa的parse包      摘要: FeedParser是一個facade類,這個類的工作就是根據讀入的RSS Feed的協議系和版本“委托(delegate)”給已經硬編碼的規則(concrete rules)指定的解析器,而且這些解析器是私有的。這意味著:用戶不能直接調用一個RSS_0_91_Parser類的實例來進行解析工作。  閱讀全文
          posted @ 2009-12-29 15:56 Paul Lin 閱讀(1493) | 評論 (0)  編輯
          【原】RSS工具開發手記(10)---Informa的impl.hibernate包      摘要: ChannelBuilder對channel object的創建原則就是:
          A.如果能夠從持久層中找到對應的記錄,那么從持久層返回
          B.如果找不到,則創建它并持久化它,然后返回該對象(已持久化)

          只要記得的一點就是:從ChannelBuilder返回的對象都是已經持久化的。  閱讀全文
          posted @ 2009-12-28 15:57 Paul Lin 閱讀(1244) | 評論 (0)  編輯
          【原】RSS工具開發手記(07)---Informa的impl.basic包      摘要: 這個ID生成類采用了系統當前時間作為隨即數產生的種子,這個并不難理解。但是有一個地方需要我們注意的就是關鍵字transient的使用。這個關鍵的作用是告訴編譯器假設該類的對象被序列化了,這個值不需要被保存。因為它是“瞬時”的。  閱讀全文
          posted @ 2009-12-23 00:03 Paul Lin 閱讀(1344) | 評論 (0)  編輯
          【原】RSS工具開發手記(05)---Informa的impl.basic包      摘要: 總結起來,channel的創建,更新過程如下:
          ①接收經過ChannelParser解析后的XML Element元素,和其他一系列屬性,調用構造方法
          ②構造方法為channel生成一個全局唯一ID
          ③構造方法創建item列表,觀察者列表,設置好分類(Category),首次更新時間
          ④如果有新item到來,則添加到item列表,同時更新item的channel歸屬
          ⑤如果現有channel更新,則設置最新更新時間
          ⑥通知每一個已注冊的觀察者有事件發生  閱讀全文
          posted @ 2009-12-22 23:31 Paul Lin 閱讀(1264) | 評論 (0)  編輯
          【原】RSS工具開發手記(04)---Informa的core包      摘要: Informa的core包介紹如下:

          “This package contains interfaces for the news channel objects, it builds the core API for all news channel storage implementation. ”

          從上面這句話來看,core包里面定義的都是關于“news channel objects”的接口---實際上就是RSS協議中的channel和item元素。經過一個多小時查看源代碼和閱讀API,發現Informa對core包的設計有如下特點:

          core包中的元素被分為標記接口、實體接口、行為接口  閱讀全文
          posted @ 2009-12-21 22:09 Paul Lin 閱讀(1251) | 評論 (0)  編輯
          【原】RSS工具開發手記(03)---初始Informa      摘要: Informa的API結構如下:

          ★core包:
          核心包。訂閱了RSS中channel,item等一系列元素和元數據的接口

          ★impl.basic包:
          基本功能包。使用in-memory模式實現了core包訂閱的接口

          ★impl.hibernate包:
          基于hibernate實現的包,使用關系型數據庫模式實現了core包定義的接口

          ★parsers包:
          定義了永遠解析channel,item的解析器工具

          ★exporters包:
          定義了一組把channel,item導出成各種協議格式的工具

          ★search包:
          定義了用于全文搜索channel,item的工具

          ★utils.manager.memory包:
          定義了一組用于管理“in-memory”模式持久化的工具

          ★utils.manager.hibernate包:   閱讀全文
          posted @ 2009-12-21 15:39 Paul Lin 閱讀(1263) | 評論 (0)  編輯
          【原】RSS工具開發手記(02)---工欲善其事,必先利其器      摘要: 選擇一個開源框架,我的標準有幾條:

          ★良好的文檔和源代碼管理:這是最基本的一條,想RSSLibJ這種連文檔、官網都沒有的一律pass掉
          ★持續的改進:這是第二個重要的,像上面某些工具從02年后就不再更新了,出了問題你找誰訴苦去
          ★簡單和易上手:在短時間內可以迅速依樣畫葫蘆
          ★活躍的社區:參與的人越多軟件成長得越多。我不是特別在乎軟件目前的使用率,因為好的軟件都是慢慢出名的  閱讀全文
          posted @ 2009-12-21 11:52 Paul Lin 閱讀(1368) | 評論 (0)  編輯
          【原】Java 多線程 之 ThreadLocal      摘要: ThreadLocal作用解析及代碼實例  閱讀全文
          posted @ 2008-09-05 17:10 Paul Lin 閱讀(4763) | 評論 (1)  編輯
          【原】Java Reflection 之 Array      摘要: Java反射之Array  閱讀全文
          posted @ 2008-09-04 15:13 Paul Lin 閱讀(1146) | 評論 (0)  編輯
          【原】Java Reflection 之 Filed      摘要: Java反射之Filed  閱讀全文
          posted @ 2008-09-04 15:02 Paul Lin 閱讀(412) | 評論 (0)  編輯
          【原】Java Reflection 之 Method      摘要: Java反射之Method  閱讀全文
          posted @ 2008-09-03 16:05 Paul Lin 閱讀(1831) | 評論 (0)  編輯
          【原】Java Reflection 之 Class      摘要: Java反射之Class  閱讀全文
          posted @ 2008-09-03 14:36 Paul Lin 閱讀(355) | 評論 (0)  編輯
          【原】多線程編程的基礎知識點      摘要: 【一】進程、線程、并發執行
          【二】JVM與多線程
          【三】Java語言對多線程的支持
          【四】線程的狀態切換
          【五】Java中線程的調度API
          【六】參考文章  閱讀全文
          posted @ 2008-09-02 10:50 Paul Lin 閱讀(3911) | 評論 (3)  編輯
          【半轉載】一個不錯的多線程Socket服務器簡單例子      摘要: 多線程池化Socket服務器  閱讀全文
          posted @ 2008-08-16 23:08 Paul Lin 閱讀(7268) | 評論 (0)  編輯
          【轉】Dom4j中自帶的教程      摘要: 來自Dom4j中的cookbook  閱讀全文
          posted @ 2008-01-30 17:13 Paul Lin 閱讀(2252) | 評論 (0)  編輯

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 九台市| 田阳县| 玛曲县| 鄱阳县| 邳州市| 宝坻区| 德清县| 游戏| 新建县| 宁晋县| 灵璧县| 措勤县| 白朗县| 昭通市| 伽师县| 基隆市| 肇东市| 古田县| 云和县| 新巴尔虎左旗| 布拖县| 旺苍县| 平舆县| 张家川| 当雄县| 平远县| 临朐县| 安新县| 陇南市| 蓬安县| 寿阳县| 安多县| 集安市| 武乡县| 聊城市| 河源市| 宜宾县| 台北县| 武邑县| 方正县| 安仁县|