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

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

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

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    file的getPath getAbsolutePath和getCanonicalPath的不同

    file的這幾個取得path的方法各有不同,下邊說說詳細的區別

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

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

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


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

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

    表示現有文件或目錄的每個路徑名都有一個惟一的規范形式。表示非存在文件或目錄的每個路徑名也有一個惟一的規范形式。非存在文件或目錄路徑名的規范形式可能不同于創建文件或目錄之后同一路徑名的規范形式。同樣,現有文件或目錄路徑名的規范形式可能不同于刪除文件或目錄之后同一路徑名的規范形式。 


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

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

    得到的結果:
    -----默認相對路徑:取得路徑不同------
    .\test1.txt
    D:\workspace\test\.\test1.txt
    -----默認絕對路徑:取得路徑相同------
    D:\workspace\test\test1.txt
    D:\workspace\test\test1.txt
    因為getPath()得到的是構造file的時候的路徑。
    getAbsolutePath()得到的是全路徑
    如果構造的時候就是全路徑那直接返回全路徑
    如果構造的時候試相對路徑,返回當前目錄的路徑+構造file時候的路徑

    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());
        }
    得到的結果
    D:\workspace\test\..\src\test1.txt
    D:\workspace\src\test1.txt
    可以看到CanonicalPath不但是全路徑,而且把..或者.這樣的符號解析出來。
    3,getCanonicalPath()和自己的不同。
    就是解釋這段話:
    表示現有文件或目錄的每個路徑名都有一個惟一的規范形式。表示非存在文件或目錄的每個路徑名也有一個惟一的規范形式。非存在文件或目錄路徑名的規范形式可能不同于創建文件或目錄之后同一路徑名的規范形式。同樣,現有文件或目錄路徑名的規范形式可能不同于刪除文件或目錄之后同一路徑名的規范形式。 
    單下邊這段代碼是看不到結果的,要配合一定的操作來看。下邊操作步驟,同時講解

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

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

    三、最后:
    1,嘗試在linux下執行上邊的步驟,兩次打印的結果是相同的,因為linux是大小寫敏感的系統。
    2,手動刪掉test.txt,然后嘗試執行下邊代碼
    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());
        }
    執行上邊兩個函數,看看結果,然后思考一下為什么?
    1,的結果是兩個大寫,
    2,的結果試兩個小寫
    連續兩個大寫的,是否跟上邊的矛盾 ?
    這是因為虛擬機的緩存機制造成的。第一次File file = new File("D:\\Text.txt");決定了結果.

    posted on 2007-08-08 09:12 dreamstone 閱讀(67634) 評論(8)  編輯  收藏 所屬分類: jdk相關

    評論

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2007-08-08 10:09 ipartime.cn

    不錯,記下了  回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2007-08-08 14:13 中東

    寫的真細,很喜歡你的文章。對于規范化目錄說明的特別清楚  回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2011-03-10 11:11 huxiao

    謝謝!!!很不錯,記下啦。  回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2012-12-04 11:17 ari

    最后例子的兩個大寫輸出以及其解釋不太懂   回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同[未登錄] 2014-03-13 14:13 xin

    getPath()得到的是構造file的時候的路徑。
    getAbsolutePath()得到的是全路徑.這兩句話就通俗易懂了  回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2014-04-10 10:47 mavk

    贊一個!  回復  更多評論   

    # 1[未登錄] 2014-12-18 16:29 1

    1  回復  更多評論   

    # re: file的getPath getAbsolutePath和getCanonicalPath的不同 2015-06-15 21:13 yxh

    寫的很詳細,謝了!  回復  更多評論   

    主站蜘蛛池模板: 中文字幕免费在线看电影大全 | 91大神亚洲影视在线| 一区二区视频免费观看| 亚洲国产一区明星换脸| 深夜A级毛片视频免费| avtt亚洲天堂| 一级白嫩美女毛片免费| 国产亚洲精品资在线| 99在线视频免费观看| 亚洲av无码精品网站| 亚洲黄色免费观看| 亚洲一卡2卡3卡4卡5卡6卡 | 日韩欧美亚洲中文乱码| 国产精品冒白浆免费视频| 黄色网址大全免费| 亚洲人成人77777网站| 日韩精品无码专区免费播放| 亚洲国产精品成人综合色在线婷婷| 成人免费毛片内射美女-百度| 亚洲欧洲日产国码久在线| 又爽又高潮的BB视频免费看| 中国毛片免费观看| 久久亚洲精品中文字幕| 扒开双腿猛进入爽爽免费视频| 妇女自拍偷自拍亚洲精品| 国产亚洲精久久久久久无码| 国产91免费在线观看| 美女露100%胸无遮挡免费观看| 亚洲中文字幕久久精品无码APP| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 精品亚洲AV无码一区二区| 日本特黄特黄刺激大片免费| japanese色国产在线看免费| 亚洲精品第五页中文字幕| 国产精品深夜福利免费观看| 最近中文字幕大全免费版在线 | 国产啪精品视频网免费| 免费人成在线观看播放a| 亚洲AV成人片色在线观看高潮| 性色av免费观看| 97无码人妻福利免费公开在线视频|