精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Java SE 7文件操作之路徑操作

開發(fā) 后端
Java SE 7中對Path類的操作主要有兩種:對路徑的操作和對文件的操作。這篇文章中我們就來了解一下對路徑的操作。

Java SE 7中對Path類的操作主要有兩種:對路徑的操作和對文件的操作。這篇文章中我們就來了解一下對路徑的操作。

創(chuàng)建Path實例
Path實例包含了指定文件或目錄位置的信息,在實例化Path類時,需要指定一個或多個目錄或文件名。路徑的根目錄不是必須的;路徑信息可能僅僅是一個目錄或文件的名稱。
最簡單的創(chuàng)建Path實例的方式就是使用Paths(注意這里有一個s)類的get方法: 
 

  1. Path p1 = Paths.get("/tmp/foo");   
  2.   Path p2 = Paths.get(args[0]);   
  3.   Path p3 = Paths.get("file:///Users/joe/FileTest.java");   



Path類接受String或URI作為參數(shù)。

獲取路徑信息
前面我們已經(jīng)說過了,F(xiàn)ile System一般是樹形結構,因此我們可以把Path理解為按順序存儲的一系列的名稱(目錄名稱和文件名稱)。目錄結構中***一層的目錄名就是序列中 index為0的那一個,目錄結構中***一層的目錄名或者文件名就是序列中index為n-1的那一個(這里n是路徑中層次的數(shù)目)。Path類提供方法來通過index獲取序列中的一個元素或一個子序列。
隨后的例子中我們使用的目錄結構如下圖:

    下面的代碼定義了一個Path對象并獲取其中的信息。要注意的是這些代碼中除了isHidden方法外,其他的方法并不需要指定的目錄或文件存在;如果不存在,isHidden方法會拋出異常。
 

Java代碼
  1. Path path = Paths.get("C:\\home\\joe\\foo");    // Microsoft Windows syntax     
  2. //Path path = Paths.get("/home/joe/foo");    // Solaris syntax     
  3. System.out.format("toString: %s%n", path.toString());     
  4. System.out.format("getName: %s%n", path.getName());     
  5. System.out.format("getName(0): %s%n", path.getName(0));     
  6. System.out.format("getNameCount: %d%n", path.getNameCount());     
  7. System.out.format("subpath(0,2): %d%n", path.subpath(0,2));     
  8. System.out.format("getParent: %s%n", path.getParent());     
  9. System.out.format("getRoot: %s%n", path.getRoot());     
  10. System.out.format("isHidden: %s%n", path.isHidden());    


下面是這段代碼的輸出情況



上面的代碼中我們創(chuàng)建Path時使用的是絕對路徑,下面我們來看看創(chuàng)建路徑時使用相對路徑時,這段代碼的執(zhí)行結果:
 

Java代碼

  1. //Path path = Paths.get("sally/bar");     // Solaris syntax     
  2. Path path = Paths.get("sally\\bar");    // Microsoft Windows syntax    


大家可以自行去實驗一下具體的輸出是什么。

去除Path中的冗余
在很多文件系統(tǒng)中我們使用'.'來代表當前目錄,使用'..'代表父目錄。在有些情況下我們創(chuàng)建的路徑中會有冗余的路徑信息,例如:
        /home/./joe/foo
        /home/sally/../joe/foo
方法normalize會去除這些冗余信息,包括'.'或'directory/..'。上面的兩個例子在去除冗余信息后都是/home/joe/foo。
要注意的是normalize方法并不去檢查文件系統(tǒng),它只是簡單的進行語法操作。在第二個例子中,如果sally是一個指向其他的目錄的符號鏈接,那么去除了sally/..后可能導致Path不在指向原來的文件或目錄。
如果你需要清除冗余信息,又要保證結果仍然指向正確的文件或目錄,可以使用toRealPath方法。在下面我們會講到這個方法。

轉換Path
有3個方法用來轉換Path。
    * toUri方法
      如果你需要將Path轉換為可以在瀏覽器中打開的字符串格式,可以使用toUri方法,例如:
 

Java代碼
 
  1. Path p1 = Paths.get("/home/logfile");     
  2. System.out.format("%s%n", p1.toUri());  // 結果是 file:///home/logfile    

      注意在這里即使/home/logfile'指向的目錄或文件不存在,這段代碼同樣能夠執(zhí)行成功。
    * toAbsolutePath方法
      該方法將路徑轉換為絕對路徑。如果原來的Path已經(jīng)是絕對路徑,該方法直接返回原有的Path對象。
      我們來看看下面的例子:
 
Java代碼
  1. Path path = Paths.get("home\\joe\\foo");     
  2. Path absolutePath = path.toAbsolutePath();     
  3. System.out.println(path == absolutePath); //結果是false     
  4.     
  5. Path path2 = Paths.get("c:\\home\\joe\\foo ");     
  6. Path absolutePath2 = path2.toAbsolutePath();     
  7. System.out.println(path2 == absolutePath2);//結果是true    


      同樣的,toAbsolutePath方法并不需要Path所指向的文件或目錄存在。
    * toRealPath方法
      這個方法會返回一個已經(jīng)存在的文件或目錄的真實路徑(如果文件或目錄不存在或無法訪問,該方法會拋出異常)。該方法會執(zhí)行以下的操作:
      如果傳入的參數(shù)是true并且文件系統(tǒng)支持符號鏈接,則解析路徑中存在的符號鏈接(如果有的話)。
      如果原來的Path是相對路徑,將其轉換成絕對路徑。
      如果路徑中含有冗余信息,返回的Path中這些冗余信息會被去除。


連接兩個Path
可以使用resolve方法來將兩個Path連接起來。該方法的參數(shù)是一個字符串。如果該字符串代表的是一個相對路徑,那么這個路徑會被擴展到原來的路徑后。如果傳入的字符串是一個絕對路徑,那么返回的值就是傳入的這個絕對路徑。例如:
 

Java代碼
  1. Path p1 = Paths.get("C:\\home\\joe\\foo");        
  2. System.out.format("%s%n", p1.resolve("bar")); // 結果是 C:\home\joe\foo\bar     
  3.     
  4. Paths.get("foo").resolve("c:\\home\joe");       // 結果是  C:\home\joe    


創(chuàng)建兩個路徑之間的路徑
這個功能說起來有些繞口,實際的功能就是創(chuàng)建兩個指定的目錄或文件之間的相對路徑。例如:
 

Java代碼
  1. Path p1 = Paths.get("joe/foo");     
  2. Path p2 = Paths.get("sally");    


在這個例子中,由于兩個路徑都是相對路徑,沒有其他的信息,我們會認為這兩個joe和sally是同一級的兄弟目錄,因此有以下的結果
 

Java代碼
  1. Path p1_to_p2 = p1.relativize(p2);   // 結果是 ../../sally     
  2. Path p2_to_p1 = p2.relativize(p1);   // 結果是 ../joe/foo   


讓我們看看另外一個例子:
 

Java代碼
  1. Path p1 = Paths.get("home");     
  2. Path p3 = Paths.get("home/sally/bar");     
  3. Path p1_to_p3 = p1.relativize(p3);  // 結果是 sally/bar     
  4. Path p3_to_p1 = p3.relativize(p1);  // 結果是 ../..   


在這個例子中,兩個路徑共享同一個節(jié)點-home,所以結果并不是../home/sally/bar和../../../home.
如果兩個路徑中有一個是絕對路徑,另外一個是相對路徑,relative方法會拋出異常。如果兩個路徑都是絕對路徑,那么relative方法的行為和系統(tǒng)相關,不同的系統(tǒng)可能不同。
我在Windows操作系統(tǒng)下實驗了一下,如果兩個路徑屬于同一個硬盤,那么可以執(zhí)行成功,否則會拋出異常。
 

Java代碼
  1. Path path1 = Paths.get("c:\\abcd\\efg");     
  2. Path path2 = Paths.get("c:\\temp");     
  3. System.out.println(path1.relativize(path2));        //結果是..\..\temp     
  4. System.out.println(path2.relativize(path1));        //結果是..\abcd\efg     
  5.     
  6. Path path3 = Paths.get("c:\\abcd\\efg");     
  7. Path path4 = Paths.get("d:\\temp");     
  8. System.out.println(path3.relativize(path4));        //拋出異常    


Path的比較
Path提供equals方法來檢查兩個Path是否相等。但是這里要注意的是比較的并不是兩個Path是否指向同一個目錄或者文件。請看下面的例子:
 

Java代碼
  1. Path path1 = Paths.get("abcd\\123");     
  2. Path path2 = Paths.get("abcd\\123");     
  3. Path path3 = Paths.get("abcd\\.\\123");     
  4. System.out.println(path1.equals(path2));        //true     
  5. System.out.println(path1.equals(path3));        //false     
  6. System.out.println(path1.equals(path3.normalize())); //true     
  7. System.out.println(path1.equals(path1.toAbsolutePath()));        //false    


Path類還提供了startsWith和endsWith方法,這兩個方法用來檢查路徑是否以指定的字符串開始或者結束,例如:
 

Java代碼
  1. Path path = ...;     
  2. Path otherPath = ...;     
  3. Path beginning = Paths.get("/home");     
  4. Path ending = Paths.get("foo");     
  5.     
  6. if (path.equals(otherPath)) {     
  7.     //equality logic here     
  8. else if (path.startsWith(beginning)) {     
  9.     //path begins with "/home"     
  10. else if (path.endsWith(ending)) {     
  11.     //path ends with "foo"     
  12. }    


Path類實現(xiàn)了Iterable接口,iterator方法會返回一個Iterator對象,該對象中的***個元素就是原路徑中最上層(最靠近根節(jié)點)的目錄。下面是使用這個方法的例子:
 

Java代碼
  1. Path path = ...;     
  2. for (Path name: path) {     
  3.     System.out.println(name);     
  4. }   


Path類還實現(xiàn)了Comparable接口,因此可以使用compareTo來比較兩個Path。比較的算法和結果是和文件系統(tǒng)的提供者和系統(tǒng)平臺相關的。大家在使用之前,***先實驗一下。
Path 類還提供了一個方法isSameFile來檢查兩個Path是否指向同一個目錄或文件。如果作為參數(shù)的Path為null,那么會直接返回false,不會去檢查Path指向的文件是否存在。如果兩Path來自不同的文件系統(tǒng)提供者,那么也會直接返回false,不會去檢查文件或目錄是否存在。如果兩個 Path執(zhí)行equals方法的返回結果為true,那么這個方法直接返回true,也不會去檢查文件或目錄是否存在。其他的情況下是否會去打開或訪問 Path指向的文件或目錄是與具體的實現(xiàn)相關的,也就是說不同的JDK/JRE可能會有不同的行為。
驗證文件或目錄是否存在
上面所介紹的很多方法都不會去驗證Path指向的文件或目錄是否存在,只是操作Path實例自身。但是在有些情況下,你需要訪問文件系統(tǒng)來驗證文件、目錄存在與否,這時你可以使用exists和notExists方法。需要注意的是!path.exists()并不等于path.notExists()。當你調(diào)用這兩個方法時,有以下3中情況:

    * 文件或者目錄被證實存在
    * 文件或者目錄被證實不存在
    * 不知道文件或目錄是否存在。當程序沒有訪問這個文件或目錄的權限的時候這個情況會發(fā)生。
如果exists()和notExists()都返回false,說明無法驗證該文件是否存在。
 

責任編輯:金賀 來源: JavaEye博客
相關推薦

2020-03-11 10:09:57

JAVA詳解classpath

2011-07-22 14:29:32

iOS 文件

2024-03-01 20:28:54

CentOS 7文件操作search

2011-08-29 09:26:57

Windows 8文件界面

2023-03-27 16:44:23

2011-10-27 14:15:05

Java 7

2009-12-07 17:51:39

2011-02-15 09:49:31

Windows 7文件訪問

2012-05-15 10:05:56

WP7 下載進度

2010-08-17 14:51:05

IE8兼容性

2011-07-21 11:25:13

iOS 窗口 事件

2011-04-01 09:43:50

Windows 7權限

2011-08-10 11:12:33

iPhone文件

2009-08-18 17:05:08

C#操作xml文件

2009-12-08 18:27:14

Windows 7操作

2009-12-01 09:23:57

Windows 7文件共享

2009-01-11 09:52:14

Windows 7微軟補丁

2009-12-25 14:46:53

Windows 7文件關聯(lián)

2024-08-27 12:18:23

函數(shù)Python

2009-09-11 08:18:29

Windows 7文件管理
點贊
收藏

51CTO技術棧公眾號

蓝色福利精品导航| 亚洲男人的天堂网站| 亚洲精品.com| www.av天天| 欧美国产精品一区二区三区| 波多野结衣在线网站| 91精品无人成人www| 亚洲午夜免费| 绯色av蜜臀vs少妇| 九九热r在线视频精品| 不卡高清视频专区| 电影亚洲精品噜噜在线观看| 亚洲一级免费在线观看| 精品剧情在线观看| 99re66热这里只有精品8| 久久视频免费看| 国产精品永久免费| 99精品在线观看视频| 国产黄色小视频在线| 成年人视频在线免费| 精品88久久久久88久久久| 亚洲精品97| 这里只有精品6| 亚洲精品高清视频| 欧美性20hd另类| 久久精品一级| 不卡的免费av| 精品国产乱码久久久久久108| 日韩毛片一二三区| 国产亚洲精aa在线看| 日韩女优一区二区| 茄子视频成人在线观看| 欧美日韩综合视频网址| 亚洲人和日本人hd| 国产有码在线观看| 亚洲人精品午夜射精日韩| 日韩高清人体午夜| 国产一区二区精品| 色女人在线视频| www.黄色com| 亚洲成色www久久网站| 亚洲精品视频网上网址在线观看| 国内成人免费视频| 国产电影一区二区| 国产普通话bbwbbwbbw| 91极品尤物在线播放国产| 日韩女优在线播放| 一本久道中文字幕精品亚洲嫩| 亚洲精品国产偷自在线观看| 麻豆影视国产在线观看| 中文字幕求饶的少妇| 相泽南亚洲一区二区在线播放 | 精品久久久久久久久久久| 欧美深夜福利| 国产精品一二三产区| 久久久精品一区二区涩爱| 91国在线高清视频| 欧美大片网站在线观看| 亚洲成人午夜电影| 99精品久久| 性欧美又大又长又硬| 无码无套少妇毛多18pxxxx| 一本久道综合色婷婷五月| 国产女人精品视频| 日韩一区二区精品在线观看| 国产成人a级片| 奇米影视777在线欧美电影观看| 欧美成人片在线| 国产三级短视频| 蜜桃视频在线观看成人| 一区二区在线视频| 亚洲欧洲色图综合| 亚洲精品久久久| 黄色成人影院| 青青草偷拍视频| 欧美影视一区二区| 亚洲电影免费观看高清完整版在线| 国产激情一区二区三区四区| 成人黄色免费短视频| 国产成人精品亚洲| 亚洲自拍第三页| 国产欧美亚洲日本| 亚洲日韩中文字幕在线播放| 国产精品麻豆一区二区| 国产精品7m凸凹视频分类| 成人在线app| 一级片中文字幕| 国产欧美激情视频| 精品国产乱码久久久久久久软件| 精品视频偷偷看在线观看| 国产精品毛片久久久久久久| 亚洲精品123区| 日韩一区二区三区四区五区| 国产综合视频在线| 亚洲色图日韩精品| 岳毛多又紧做起爽| 51午夜精品| 中文字幕av一区二区| 亚洲国产成人av网| 精品影视av免费| 国产一区不卡| 自拍视频在线看| 国产又大又长又粗| 五月天精品视频| 亚洲国产成人精品无码区99| 国产精品香蕉在线观看| 亚洲欧美日韩一区二区三区在线| 中文字幕亚洲欧美在线不卡| 国产欧美在线| 日韩精品一级| 18加网站在线| 国产精品久久久久精| 极品久久久久久久| 色乱码一区二区三区在线| 国内视频一区| 57pao国产精品一区| 日韩av在线影院| 欧美日韩加勒比精品一区| 成人一区二区在线观看| 伊人激情综合| 九色丨蝌蚪丨成人| 91超碰在线| 国产区视频在线播放| 亚洲一区二区色| 久久久久亚洲AV成人无在 | 奇米精品一区二区三区在线观看一| 婷婷综合福利| 麻豆免费在线| 91caoporn在线| 国产成人麻豆精品午夜在线| 欧美激情精品久久| 最近中文字幕在线mv视频在线| 一本色道无码道dvd在线观看| 久久精品一区二区三区不卡免费视频| 日本在线观看天堂男亚洲| 亚洲精品视频在线播放| 欧美乱妇一区二区三区不卡视频| 一区二区三区在线免费播放| 99视频超级精品| 精一区二区三区| 亚洲免费二区| 色综合综合色| 日韩三级网址| 日韩漫画puputoon| 国产精品蜜臀| 免费人成在线观看播放视频| 色综合视频在线| 国产精品羞羞答答在线| 国产又大又黄又粗| 黄色一级片在线| 国产91在线播放九色| 欧美性猛交xx| 中文字幕视频三区| 少妇激情一区二区三区| 欧美 国产 精品| 一区二区三区四区不卡| 欧美一级爱爱| 国产精品久久久久久久小唯西川| 国产精品一二区| 国产精品精品一区二区三区午夜版| 精品久久国产精品| 日韩专区在线播放| 久久久成人的性感天堂| 在线观看国产精品91| 亚洲欧洲中文天堂| 亚洲精品一区二区在线| 亚洲精品视频免费| 国产一区二区三区日韩欧美| 亚洲欧洲美洲在线综合| 中文字幕亚洲欧美日韩高清 | 国产又粗又爽又黄的视频| 亚洲一区在线直播| 亚洲精品永久www嫩草| 一级黄色免费在线观看| 中文字幕成人一区| www.国产二区| 99热成人精品热久久66| 四季av一区二区| 日本超碰在线观看| 亚洲午夜精品在线观看| 91丨porny丨对白| 国产精品扒开腿做爽爽爽a片唱戏| 中文在线永久免费观看| 亚洲av成人无码久久精品 | 午夜一区二区三区视频| 黑人欧美xxxx| 欧美一区二区三区性视频| 亚洲第一偷拍网| 色偷偷综合社区| 97超级碰碰人国产在线观看| 国产精品九九久久久久久久| 在线午夜精品自拍| 久久久日本电影| 成人疯狂猛交xxx| 精品无人区一区二区三区| 一区二区三区欧美成人| 成年人午夜免费视频| 欧美私人情侣网站| 亚洲视频 中文字幕| 国产不卡在线观看视频| 日韩欧美性视频| 性欧美一区二区三区| 国产精品一区在线看| heyzo高清中文字幕在线| 成人精品三级| 久久不见久久见中文字幕免费| 国内精品美女在线观看| 久99久精品视频免费观看| 不卡一区二区三区四区| 亚洲综合免费观看高清完整版在线 | 一区二区日韩| 综合久久精品| 国产电影一区二区三区| 亚洲四区在线观看| 在线不卡一区二区| 蜜臀久久99精品久久久无需会员 | 欧美日韩国产限制| 亚洲国产精彩中文乱码av| 久久久久久久久久国产| 国产一区不卡在线观看| 99在线免费视频观看| 亚洲美女在线播放| 在线观看国产亚洲| 天天色综合久久| 偷拍自拍在线看| 日韩精品中文字幕第1页| 久久国内精品自在自线400部| 国产精品久久久久久久浪潮网站| 欧美高清hd18日本| 欧美精品aaa| 国产91aaa| 超碰影院在线观看| 国产欧美小视频| 亚洲国产精品成人久久蜜臀| 国产白丝在线观看| 丝袜美腿综合| 精品一区二区免费视频| 午夜国产精品一区| 日韩在线免费av| 麻豆av一区二区三区| 污污视频网站免费观看| 色噜噜噜噜噜噜| 图片区 小说区 区 亚洲五月| 欧美日韩尤物久久| 影音先锋中文字幕一区| 国产日韩在线不卡| 亚洲国产精品久久久久| 国产成人综合久久| 国产成人永久免费视频| 在线免费看av网站| 免费在线稳定资源站| 久久男人av| 国产a级毛片一区| 正在播放一区二区| 国产999在线观看| 久在线观看视频| 日韩美女视频网站| 丰乳肥臀在线| 91精品综合| 亚洲精品综合在线| 色yeye香蕉凹凸一区二区av| 日韩精品久久久毛片一区二区| 波多野结衣先锋影音| 亚洲国产综合网| av成人app永久免费| 国产成人一级电影| 精品成人免费观看| 不卡视频一区| 亚洲精品乱码久久| 成人午夜精品福利免费| 思热99re视热频这里只精品| 26uuu欧美| 在线看日韩欧美| 韩国黄色一级大片| 欧美人妻精品一区二区免费看| 麻豆视频网站在线观看| 亚洲乱码免费伦视频| 亚洲高清免费观看高清完整版在线观看 | 日本不卡一二三区黄网| 欧美顶级少妇做爰| 91丝袜脚交足在线播放| 中国av免费看| 亚洲欧美视频一区二区| 一区二区三区网站| 精品欧美aⅴ在线网站| 国产精品美女久久久久久免费| 永久免费黄色片| 人妻中文字幕一区| 日韩中文首页| 一本大道久久a久久精二百| 国产精品一区二区久久精品| 俄罗斯女人裸体性做爰| 国产精品麻豆一区二区三区| 欧美精品播放| 欧美在线免费视屏| 久久精品99久久| 五月天婷婷色综合| 六九午夜精品视频| 91麻豆.com| 欧美激情视频在线观看| 天天爽人人爽夜夜爽| 香港一级纯黄大片| 在线国产日韩| 精品国产一区二区三区av性色| 亚洲黄色一区二区三区| 亚洲精品视频在线观看免费视频| 蜜桃av在线| 国产+成+人+亚洲欧洲自线| 久久这里只有精品99| 色婷婷一区二区三区在线观看| 麻豆系列在线观看| 粉嫩一区二区三区在线看| 久久91亚洲人成电影网站| 丰满少妇xbxb毛片日本| a√中文在线观看| 久久综合狠狠综合| 国产精品爽黄69天堂a| 久草视频手机在线| 国产成人精品福利| 色综合视频一区二区三区高清| 婷婷精品国产一区二区三区日韩| 亚洲天堂久久久久| 亚洲高清成人| 色综久久综合桃花网| 欧美丰满熟妇bbb久久久| 91精品论坛| 成人欧美一区二区三区视频网页 | 美女视频久久黄| 日本高清www| 高清久久精品| 日本高清不卡aⅴ免费网站| 91xxx视频| 国产高清一区在线观看| 国产成人亚洲综合a∨婷婷图片| 91wwwcom在线观看| 国产亚洲小视频| 91综合在线| 国产亚洲欧美日韩精品| 18禁一区二区三区| 成人亚洲精品| 欧美日本一区二区三区四区| 尤物av无码色av无码| 亚洲第一图区| 亚洲精品成人a在线观看| 亚洲区一区二区三区| 日韩一二三四| 北条麻妃国产九九精品视频| 91久久综合亚洲鲁鲁五月天| 18国产免费视频| 麻豆精品精品国产自在97香蕉| 欧洲s码亚洲m码精品一区| 日本午夜小视频| 国产精品美女久久久浪潮软件| 欧美激情精品久久久久久大尺度 | 精品在线观看一区| 成人在线国产| 国产小视频国产精品| 99精品全国免费观看| 天天射—综合中文网| 久久久国产视频91| 久久97人妻无码一区二区三区| 国产精品激情| 欧美中文字幕在线| 91视频在线视频| 美女尤物国产一区| 91成人免费观看| 少妇喷水在线观看| 欧美久色视频| 日韩免费视频在线观看| 成人黄色片在线观看| 韩国女主播成人在线| 99re在线视频上| 麻豆影视在线| 亚洲激情图片qvod| 免费观看日韩毛片| av亚洲一区二区三区| 日韩午夜激情电影| 欧美成人国产精品一区二区| 久久久久亚洲| 欧美中文字幕视频在线观看| 国产毛片久久久久| 91视频你懂的| 男人c女人视频| 久久精品97| 中文字幕日韩综合av| 综合网在线观看| 大白屁股一区二区视频| 亚洲欧美日韩在线综合| 国产福利电影在线播放| 91精品国产福利| 久久精品色妇熟妇丰满人妻| 国产精品日韩欧美一区| 91免费福利视频| 大片免费播放在线视频| 日韩欧美aaa| 丰满少妇一区二区三区| 亚洲韩日在线| 国产三级精品在线不卡| caoporn免费在线视频| 欧美一区二区三区精品|