日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

java.io.File 中 getPath(), getAbsolutePath()

系統(tǒng) 1997 0
file的這幾個(gè)取得path的方法各有不同,下邊說說詳細(xì)的區(qū)別

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

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

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


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

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

表示現(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)方法拒絕對(duì)該文件進(jìn)行讀取訪問
從以下版本開始:
JDK1.
1

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

}

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

2,getAbsolutePath()和getCanonicalPath()的不同
public static void test2() throws Exception {
Filefile
= 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不但是全路徑,而且把..或者.這樣的符號(hào)解析出來。
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 {
Filefile
= 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í)可以對(duì)比getAbsolutePath()看看,這個(gè)得到的結(jié)果是一樣的。

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

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

public static void test3() throws Exception {
Filefile1
= new File( " D:\\text.txt " );
file1.createNewFile();
Filefile
= 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ī)制造成的。第一次Filefile = new File( " D:\\Text.txt " );決定了結(jié)果.

原文地址: http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html


java.io.File 中 getPath(), getAbsolutePath() 和 getCanonicalPath() 三個(gè)方法的區(qū)別


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 宜阳县| 吉隆县| 山丹县| 闵行区| 哈尔滨市| 恩施市| 山西省| 西安市| 鹤岗市| 临泉县| 侯马市| 象山县| 黄梅县| 淅川县| 平乡县| 石景山区| 荃湾区| 樟树市| 前郭尔| 磴口县| 凤翔县| 和龙市| 金秀| 云南省| 鄂伦春自治旗| 阿图什市| 苗栗市| 任丘市| 辽源市| 百色市| 离岛区| 灵川县| 青铜峡市| 台安县| 揭西县| 子长县| 如东县| 巩留县| 平南县| 湘潭市| 江山市|