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

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

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

    afrag  
    記錄學習和成長的歷程
    日歷
    <2010年3月>
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910
    統計
    • 隨筆 - 9
    • 文章 - 5
    • 評論 - 2
    • 引用 - 0

    導航

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    •  

    積分與排名

    • 積分 - 10138
    • 排名 - 2383

    最新評論

    閱讀排行榜

    評論排行榜

     
    轉自開發者的天空

    Path類提供了很多方法來對文件和目錄進行讀、寫和其他的操作。在看這些方法之前,我們先需要了解一些其他的概念:

    Varargs實際上是Variable number of arguments的縮寫,也就是可變數目的參數。例如在下面的方法聲明中,CopyOption參數后面的省略號表明這個方法接受可變個數的參數。
            Path moveTo(Path, CopyOption...)
    當一個方法可以接受可變數目的參數時,你可以傳入以逗號分隔的多個參數,或者傳入一個數組。
    對于上面的moveTo方法,可以這樣調用:
    import static java.nio.file.StandardCopyOption.*;

            Path orig 
    = ;
            Path 
    new = ;
            orig.moveTo(
    new, REPLACE_EXISTING, ATOMIC_MOVE);


    Path的很多方法在文件系統上執行的操作都是原子操作,例如moveTo方法。原子操作是指不會被中斷或不會部分執行的操作。操作要么是完全成功,要么是完全失敗。當有多個進程操作同文件系統的相同的區域的時候這一點就很重要。


    很多的文件I/O方法支持方法鏈的概念。
    調用第一個方法會返回一個對象,我們可以直接調用這個對象的方法,這個方法依然返回一個對象,我們又可以直接調用該對象的方法,就這樣持續下去。例如:
            String value = Charset.defaultCharset().decode(buf).toString();
            UserPrincipal group = file.getFileSystem().getUserPrincipalLookupService().lookupPrincipalByName("me");
    這個技術能夠使我們編寫更加緊湊的代碼,避免聲明一些我們不需要的臨時變量。


    Path類實現了FileRef接口。FileRef接口包含了定位文件和訪問文件的方法。


    Path類有兩個方法能夠接受帶模式匹配的參數。下面是這種參數的規則:
    星號*匹配任意數目的字符(也可能是沒有)
    兩個星號**同樣是代表任意數目的字符,不同的是這個匹配可以穿越目錄邊界。例如 c:"a**"bar可以匹配c:"abc"bar,也可以匹配c:"am"cn"bar。
    問號?匹配一個字符
    花括號{}表明子模式的集合,例如{sun,moon,stars}可以匹配'sun','moon'或‘stars’;{temp*,tmp*}可以匹配以temp或tmp開始的任意字符串。
    要匹配*,?或其他的特殊字符,可以使用轉義符"。例如""匹配單個的","?匹配問號。
    方括號[]表示一組單獨的字符,當使用了-的時候,也代表一個范圍的字符,例如:
    [aeiou]匹配任何單獨的元音字符,[0-9]匹配任意數字,[A-Z]匹配任意大寫字母,[a-z,A-Z]匹配任意大寫或小寫字母。在方括號中,星號、問號和"都只是表示它們自身,不再作為特殊符號。
    下面是一些例子:
    *.html匹配所有以.html結尾的字符串。
    ???匹配所有長度為3的字符串
    *[0-9]*匹配所有包含有數字的字符串
    *.{html,htm,pdf}匹配所有以.html,.html或.pdf結尾的字符串
    a?*.java匹配所有以a開頭,后面跟至少一個字符,然后以.java結尾的字符串。
    {foo*,*[0-9]*}匹配以foo開頭的字符串或包含有數字的字符串。
    關于參數中的模式的使用,請參考FileSystem類的getPathMatcher方法的幫助文檔。
    如果這種模式匹配仍然不能夠滿足需要,我們還可以使用正則表達式。



    Path會指向文件或者目錄,但是我們還不能確定這個文件或者目錄是否存在,是否可讀,是否可寫,是否可以執行。要確定文件/目錄是否存在以及程序是否可以訪問該文件/目錄,可以使用checkAccess(AccessMode...)方法。可選的AccessMode有:
        * READ – 檢查文件/目錄是否存在以及程序是否有權限讀該文件/目錄
        * WRITE – 檢查文件/目錄是否存在以及程序是否有權限寫該文件/目錄
        * EXECUTE – 檢查文件/目錄是否存在以及程序在該文件/目錄上是否有執行權限
    如果調用checkAccess的時候沒有傳入任何參數,該方法只是檢查文件是否存在。
    下面的例子演示了怎樣驗證文件是否存在以及程序是否有讀和執行的權限。
    import static java.nio.file.AccessMode.*;
          
        Path file = ...;
        try {
            file.checkAccess(READ, EXECUTE);
        } catch (IOException x) {
            //Logic for error condition...
            return;
        }

        //Logic for executable file...
    需要注意的是,當checkAccess執行完之后,文件的權限可能被其他的用戶(例如系統管理員)修改。這實際上是很多應用程序都有的安全性的問題。如果你感興趣,可以搜索TOCTTOU (time of check to time of use)。


    當文件系統中存在符號鏈接的時候,可能兩個不同的路徑會指向同一個文件或目錄。方法isSamePath會比較兩個Path來檢查它們是否指向同一個文件/目錄。
        Path p1 = ...;
        Path p2 = ...;

        try {
            if (p1.isSameFile(p2)) {
                //Logic when the paths locate the same file
            }
        } catch (IOException x) {
            //Logic for error condition...
            return;
        }
    posted on 2010-03-29 10:02 afrag 閱讀(237) 評論(0)  編輯  收藏 所屬分類: Java隨想
     
    Copyright © afrag Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 在线亚洲97se亚洲综合在线| 成人免费a级毛片| 亚洲中文字幕乱码一区| 亚洲午夜日韩高清一区| 色se01短视频永久免费| 免费人成在线观看视频高潮| 亚洲综合激情五月丁香六月| 久久亚洲国产精品五月天| 免费人成视频在线观看不卡| 成年人视频免费在线观看| 免费精品无码AV片在线观看| fc2免费人成在线视频| 特级毛片全部免费播放a一级| 亚洲va在线va天堂成人| 亚洲w码欧洲s码免费| 亚洲精品国产专区91在线| 亚洲欧洲国产成人精品| 亚洲视频在线观看免费视频| 亚洲视频在线播放| 在线免费观看亚洲| 亚洲午夜电影在线观看高清 | 一级特级aaaa毛片免费观看 | 噼里啪啦电影在线观看免费高清 | 亚洲欧洲精品久久| 亚洲乱码在线视频| 亚洲色偷偷色噜噜狠狠99网| 亚洲日韩国产一区二区三区在线| 亚洲日韩一区精品射精| 黄色片网站在线免费观看| 中文字幕在线免费视频| 在线观看免费黄网站| 日本视频在线观看永久免费| 永久免费在线观看视频| 国产青草视频在线观看免费影院| 免费少妇a级毛片| 麻豆亚洲AV永久无码精品久久| 国产精品亚洲综合久久| 全部一级一级毛片免费看| 久久99精品免费视频| 成人免费午夜视频| 午夜亚洲AV日韩AV无码大全|