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

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

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

    posts - 134,comments - 22,trackbacks - 0
    file的這幾個(gè)取得path的方法各有不同,下邊說說詳細(xì)的區(qū)別

    概念上的區(qū)別:(內(nèi)容來自jdk,個(gè)人感覺這個(gè)描述信息,只能讓明白的人明白,不明白的人看起來還是有點(diǎn)難度(特別試中文版,英文版稍好些)所以在概念之后我會舉例說明。如果感覺看概念很累就跳過直接看例子吧。看完例子回來看概念會好些。
    getPath
    public String getPath()將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。所得到的字符串使用默認(rèn)名稱分隔符來分隔名稱序列中的名稱。 

    返回:
    此抽象路徑名的字符串形式

    getAbsolutePath
    public String getAbsolutePath()返回抽象路徑名的絕對路徑名字符串。 
    如果此抽象路徑名已經(jīng)是絕對路徑名,則返回該路徑名字符串,這與 getPath() 方法一樣。如果此抽象路徑名是空的抽象路徑名,則返回當(dāng)前用戶目錄的路徑名字符串,該目錄由系統(tǒng)屬性 user.dir 指定。否則,使用與系統(tǒng)有關(guān)的方式分析此路徑名。在 UNIX 系統(tǒng)上,通過根據(jù)當(dāng)前用戶目錄分析某一相對路徑名,可使該路徑名成為絕對路徑名。在 Microsoft Windows 系統(tǒng)上,通過由路徑名指定的當(dāng)前驅(qū)動(dòng)器目錄(如果有)來分析某一相對路徑名,可使該路徑名成為絕對路徑名;否則,可以根據(jù)當(dāng)前用戶目錄來分析它。 


    返回:
    絕對路徑名字符串,它與此抽象路徑名表示相同的文件或目錄的 
    拋出: 
    SecurityException 
    - 如果無法訪問所需的系統(tǒng)屬性值。
    另請參見:
    isAbsolute()

    getCanonicalPath
    public String getCanonicalPath()
                            
    throws IOException返回抽象路徑名的規(guī)范路徑名字符串。 
    規(guī)范路徑名是絕對路徑名,并且是惟一的。規(guī)范路徑名的準(zhǔn)確定義與系統(tǒng)有關(guān)。如有必要,此方法首先將路徑名轉(zhuǎn)換成絕對路徑名,這與調(diào)用 getAbsolutePath() 方法的效果一樣,然后用與系統(tǒng)相關(guān)的方式將它映射到其惟一路徑名。這通常涉及到從路徑名中移除多余的名稱(比如 
    "." 和 "..")、分析符號連接(對于 UNIX 平臺),以及將驅(qū)動(dòng)器名轉(zhuǎn)換成標(biāo)準(zhǔn)大小寫形式(對于 Microsoft Windows 平臺)。 

    表示現(xiàn)有文件或目錄的每個(gè)路徑名都有一個(gè)惟一的規(guī)范形式。表示非存在文件或目錄的每個(gè)路徑名也有一個(gè)惟一的規(guī)范形式。非存在文件或目錄路徑名的規(guī)范形式可能不同于創(chuàng)建文件或目錄之后同一路徑名的規(guī)范形式。同樣,現(xiàn)有文件或目錄路徑名的規(guī)范形式可能不同于刪除文件或目錄之后同一路徑名的規(guī)范形式。 


    返回:
    表示與此抽象路徑名相同的文件或目錄的規(guī)范路徑名字符串 
    拋出: 
    IOException 
    - 如果發(fā)生 I/O 錯(cuò)誤(可能是因?yàn)闃?gòu)造規(guī)范路徑名需要進(jìn)行文件系統(tǒng)查詢) 
    SecurityException 
    - 如果無法訪問所需的系統(tǒng)屬性值,或者存在安全管理器,且其 SecurityManager.checkRead(java.io.FileDescriptor) 方法拒絕對該文件進(jìn)行讀取訪問
    從以下版本開始: 
    JDK1.
    1 

    二、例子:
    1,getPath()與getAbsolutePath()的區(qū)別
    public static void test1(){
            File file1 
    = new File(".\\test1.txt");
            File file2 
    = new File("D:\\workspace\\test\\test1.txt");
            System.out.println(
    "-----默認(rèn)相對路徑:取得路徑不同------");
            System.out.println(file1.getPath());
            System.out.println(file1.getAbsolutePath());
            System.out.println(
    "-----默認(rèn)絕對路徑:取得路徑相同------");
            System.out.println(file2.getPath());
            System.out.println(file2.getAbsolutePath());
            
        }

    得到的結(jié)果:
    -----默認(rèn)相對路徑:取得路徑不同------
    .\test1.txt
    D:\workspace\test\.\test1.txt
    -----默認(rèn)絕對路徑:取得路徑相同------
    D:\workspace\test\test1.txt
    D:\workspace\test\test1.txt
    因?yàn)間etPath()得到的是構(gòu)造file的時(shí)候的路徑。
    getAbsolutePath()得到的是全路徑
    如果構(gòu)造的時(shí)候就是全路徑那直接返回全路徑
    如果構(gòu)造的時(shí)候試相對路徑,返回當(dāng)前目錄的路徑+構(gòu)造file時(shí)候的路徑

    2,getAbsolutePath()和getCanonicalPath()的不同
    public static void test2() throws Exception{
            File file 
    = new File("..\\src\\test1.txt");
            System.out.println(file.getAbsolutePath());
            System.out.println(file.getCanonicalPath());
        }
    得到的結(jié)果
    D:\workspace\test\..\src\test1.txt
    D:\workspace\src\test1.txt
    可以看到CanonicalPath不但是全路徑,而且把..或者.這樣的符號解析出來。
    3,getCanonicalPath()和自己的不同。
    就是解釋這段話:
    表示現(xiàn)有文件或目錄的每個(gè)路徑名都有一個(gè)惟一的規(guī)范形式。表示非存在文件或目錄的每個(gè)路徑名也有一個(gè)惟一的規(guī)范形式。非存在文件或目錄路徑名的規(guī)范形式可能不同于創(chuàng)建文件或目錄之后同一路徑名的規(guī)范形式。同樣,現(xiàn)有文件或目錄路徑名的規(guī)范形式可能不同于刪除文件或目錄之后同一路徑名的規(guī)范形式。 
    單下邊這段代碼是看不到結(jié)果的,要配合一定的操作來看。下邊操作步驟,同時(shí)講解

    public static void test3() throws Exception{
            File file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
        }
    步驟:
    確定你的系統(tǒng)是Windows系統(tǒng)。
    (1),確定D盤下沒有Text.txt這個(gè)文件,直接執(zhí)行這段代碼,得到的結(jié)果是:
    D:\Text.txt
    注意這里試大寫的Text.txt
    (2)在D盤下建立一個(gè)文件,名叫text.txt,再次執(zhí)行代碼,得到結(jié)果
    D:\text.txt
    同樣的代碼得到不同的結(jié)果。
    同時(shí)可以對比getAbsolutePath()看看,這個(gè)得到的結(jié)果是一樣的。

    原因:
    window是大小寫不敏感的,也就是說在windows上test.txt和Test.txt是一個(gè)文件,所以在windows上當(dāng)文件不存在時(shí),得到的路徑就是按照輸入的路徑。但當(dāng)文件存在時(shí),就會按照實(shí)際的情況來顯示。這也就是建立文件后和刪除文件后會有不同的原因。文件夾和文件類似。

    三、最后:
    1,嘗試在linux下執(zhí)行上邊的步驟,兩次打印的結(jié)果是相同的,因?yàn)閘inux是大小寫敏感的系統(tǒng)。
    2,手動(dòng)刪掉test.txt,然后嘗試執(zhí)行下邊代碼
    public static void test4() throws Exception{
            File file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
            File file1 
    = new File("D:\\text.txt");
            file1.createNewFile();
            file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
        }

    public static void test3() throws Exception{
            File file1 
    = new File("D:\\text.txt");
            file1.createNewFile();
            File file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
        }
    執(zhí)行上邊兩個(gè)函數(shù),看看結(jié)果,然后思考一下為什么?
    1,的結(jié)果是兩個(gè)大寫,
    2,的結(jié)果試兩個(gè)小寫
    連續(xù)兩個(gè)大寫的,是否跟上邊的矛盾 ?
    這是因?yàn)樘摂M機(jī)的緩存機(jī)制造成的。第一次File file = new File("D:\\Text.txt");決定了結(jié)果.

    來至javaeye
    posted on 2009-03-05 10:17 何克勤 閱讀(250) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 亚洲熟伦熟女新五十路熟妇 | 成人亚洲国产va天堂| 国产美女在线精品免费观看| 麻豆亚洲AV成人无码久久精品 | 青青操视频在线免费观看| 亚洲天堂男人天堂| 四虎在线视频免费观看| 成人A毛片免费观看网站| 亚洲综合一区二区精品久久| 日韩免费三级电影| 免费人成在线观看网站品爱网 | 免费无遮挡无遮羞在线看| 久久亚洲私人国产精品vA | 亚洲av乱码一区二区三区香蕉| 亚洲国产精品自产在线播放| 91香蕉国产线观看免费全集| 亚洲a∨无码精品色午夜| 亚洲av日韩综合一区在线观看| 在线观看成人免费| 亚洲欧洲免费视频| 特级av毛片免费观看| 亚洲制服丝袜一区二区三区| 亚洲女同成av人片在线观看| 日本特黄特色aa大片免费| 无码人妻一区二区三区免费看| 免费看一级一级人妻片| 亚洲成aⅴ人片在线影院八| 亚洲一区二区三区无码中文字幕| 成人毛片视频免费网站观看| 久久久久国色av免费看 | 午夜两性色视频免费网站| 免费无遮挡无码永久视频 | 先锋影音资源片午夜在线观看视频免费播放 | 亚洲精品无码久久久影院相关影片| 日韩精品福利片午夜免费观着| 免费人成毛片动漫在线播放| 黄网站色成年片大免费高清| 亚洲国产AV一区二区三区四区| 亚洲婷婷天堂在线综合| 日韩va亚洲va欧洲va国产| 亚洲福利在线播放|