<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0
    【一】Apache commons IO包之FilenameUtils

    在使用JDK的File類構(gòu)建目錄、文件對(duì)象時(shí),通常會(huì)碰到以下的問(wèn)題:

     ①分隔符的問(wèn)題:Unix系統(tǒng)和Windos系統(tǒng)的路徑分隔符、換行符不同
     ②路徑規(guī)范的問(wèn)題:有些API對(duì)于返回的目錄路徑不帶"/",有些則有
     ③文件名規(guī)范的問(wèn)題:有些文件名中間帶有空格,導(dǎo)致程序解析錯(cuò)誤

    上面的問(wèn)題雖然不算復(fù)雜,卻也惱人。有時(shí)候甚至?xí)谶@些問(wèn)題上耗費(fèi)大量的時(shí)間。于是Apache commons io包提供了一個(gè)FilenameUtils類來(lái)專門幫助我們解決這樣的問(wèn)題。根據(jù)Apache common io的說(shuō)法:你可以通過(guò)使用JDK自帶的File類構(gòu)造方法File(String parent, String child)來(lái)避免使用這個(gè)類,但是實(shí)際上這個(gè)類還是很有用的!

    【二】Apache commons IO包中對(duì)路徑的定義

    要了解Apache commons IO包如何處理路徑文件名的問(wèn)題,首先要知道Apache中如何定義關(guān)于路徑的參數(shù):

    關(guān)于路徑有3個(gè)概念:
     ①前綴:盤符或者根目錄
     ②路徑:從前綴或根目錄開始直至文件的所在目錄
     ③全路徑:包含了前綴和路徑

    要注意的是:在Apache的所以關(guān)于路徑的概念中,都是以分隔符結(jié)尾的。因?yàn)榘凑誂pache的說(shuō)法,如果沒有提供分隔符,它將不能正確地識(shí)別路徑代表的是一個(gè)目錄還是一個(gè)文件,在這種情況下只能選擇將其識(shí)別為一個(gè)文件。

    關(guān)于文件名也有3個(gè)概念:
     ①基本名稱:不包含路徑和擴(kuò)展名的部分
     ②擴(kuò)展名稱:從.開始直至結(jié)束的部分
     ③文件名稱:包含了基本名稱和擴(kuò)展名稱

    要注意的是:擴(kuò)展名并不包含"."

    在路徑概念中,前綴是一個(gè)很重要的概念:因?yàn)樗嬖V了程序應(yīng)該從那里開始識(shí)別,在Apache commons IO包中,使用如下規(guī)則去獲取前綴:


    【三】常用API

    ①路徑規(guī)范

    首先要介紹的就是normalize方法,這個(gè)方法用于對(duì)各種類型的路徑進(jìn)行規(guī)范,它的規(guī)則如下:

    A trailing slash will be retained.
    A double slash will be merged to a single slash (but UNC names are handled).
    A single dot path segment will be removed.
    A double dot will cause that path segment and the one before to be removed.
    If the double dot has no parent path segment to work with, null is returned


    下面是官網(wǎng)上面的一個(gè)例子:


    要特別注意的是:這個(gè)方法總是會(huì)返回一個(gè)結(jié)尾帶有"/"的路徑,如果你不需要這個(gè)分隔符,那么你可以調(diào)用另外一個(gè)方法:normalizeNoEndSeparator(String filename)。

    ②路徑的比較

    有點(diǎn)時(shí)候我們需要比較兩個(gè)路徑是否代表了同一個(gè)資源,但是由于路徑寫法或者API調(diào)用的不同,即便同一個(gè)對(duì)象也有可能返回false的結(jié)果。于是Apache提供了一個(gè)直接簡(jiǎn)便的方法:equals。這個(gè)方法的完整簽名是:

     static boolean equals(String filename1, String filename2,
                                   boolean normalized, IOCase caseSensitivity)

    其中normalized參數(shù)表示在比較前是否要進(jìn)行規(guī)范,通常都是true,參數(shù)caseSensitivity表示是否大小寫敏感。這個(gè)參數(shù)有3個(gè)可選擇的選項(xiàng),他們分別是:
     ※ IOCase.INSENSITIVE
     ※ IOCase.SENSITIVE
     ※ IOCase.SYSTEM

    通常為了移植性我們都會(huì)選擇IOCase.SYSTEM,即根據(jù)系統(tǒng)的類型自動(dòng)決定。

    ③路徑獲取

    分為path和full path兩種情況,可用的API有:

     ※ getFullPath(String filename)/getFullPathNoEndSeparator(String filename)
     ※ getPath(String filename)/getPathNoEndSeparator(String filename)
     
    ④路徑的截取

    包含了對(duì)擴(kuò)展名的位置判斷和分隔符的位置判斷。設(shè)想一下假如現(xiàn)在有這樣的一個(gè)路徑:C:/path/my.file/you.txt

    如果我們要獲取擴(kuò)展名,使用indexOf('.'),那么返回的將是錯(cuò)誤的結(jié)果。使用Apache commons IO提供的indexOfExtension(String filename)方法,將會(huì)首先檢查在"."后是否還有"/"分隔符。

    該方法內(nèi)部默認(rèn)調(diào)用了另外一個(gè)方法:indexOfLastSeparator(String filename)

    ⑤文件名的獲取

    分為全文件名,基本文件名,擴(kuò)展名。可用的API有:

     ※ getName(String filename)
     ※ getBaseName(String filename)
     ※ getExtension(String filename)


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-03-08 10:56 Paul Lin 閱讀(855) 評(píng)論(0)  編輯  收藏 所屬分類: J2SE
    <2010年3月>
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久亚洲中文字幕精品一区四| 一级毛片免费不卡| 久久夜色精品国产嚕嚕亚洲av| 免费涩涩在线视频网| 99re6免费视频| 成人电影在线免费观看| 污污视频免费观看网站| 四虎必出精品亚洲高清| 337p日本欧洲亚洲大胆精品555588| 久久亚洲中文字幕精品一区四| 国产成人无码免费视频97| 大地资源免费更新在线播放| 99久9在线|免费| 成人无码WWW免费视频| 国产精品偷伦视频免费观看了| 美女视频免费看一区二区| 亚洲欧美国产精品专区久久| 亚洲性猛交xx乱| 亚洲国产成人久久精品app| 91亚洲一区二区在线观看不卡 | 亚洲欧洲日本精品| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国内精品免费视频自在线| 国产成人无码免费看视频软件| 最近最好最新2019中文字幕免费| 很黄很污的网站免费| 久久九九全国免费| 无码人妻AV免费一区二区三区| 另类免费视频一区二区在线观看| 免费无码又爽又刺激高潮软件| 国产日韩一区二区三免费高清| 免费无码作爱视频| 日本免费一区二区三区四区五六区| 久久久久久久99精品免费| 99久久免费看国产精品| 最近2019免费中文字幕6| 国产精品永久免费10000| 一区二区无码免费视频网站| 妞干网手机免费视频| 日本人的色道www免费一区| 国产免费看插插插视频|