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

          導航

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          積分與排名

          • 積分 - 10198
          • 排名 - 2381

          最新評論

          閱讀排行榜

          評論排行榜

           

          轉(zhuǎn)自開發(fā)者的天空

          刪除操作

          通過Path類,我們可以刪除文件、目錄或符號鏈接。要注意的是當我們刪除符號鏈接時,其指向的目的目錄或文件不會被刪除。當要刪除一個目錄時,該目錄必須為空,否則會失敗。

          Path類提供了兩個刪除方法。第一個是delete方法。Delete方法會直接刪除文件或目錄,如果刪除失敗則會拋出異常。例如如果要刪除的文件不存在,則會拋出NoSuchFileException。程序員可以catch這些異常并進行相應的處理。

          try {
              path.delete();
          catch (NoSuchFileException x) {
              System.err.format(
          "%s: no such file or directory%n", path);
          catch (DirectoryNotEmptyException x) {
              System.err.format(
          "%s not empty%n", path);
          catch (IOException x) {
              //File permission problems are caught here.
              System.err.println(x);
          }


          另外一個方法是deleteIfExists。這個方法同樣會刪除文件或目錄,和delete方法唯一不同的是如果文件不存在,這個方法不會拋出異常。


          拷貝操作

          Path類提供了拷貝文件或目錄的方法,就是copyTo方法。(以前要copy文件只能夠自己寫程序完成哦!)。在進行拷貝的時候,我們可以指定如果目標文件或目錄已經(jīng)存在時怎么處理;如果設(shè)置了REPLACE_EXISTING,則會覆蓋已有的文件或目錄;如果沒有設(shè)置 REPLACE_EXISTING,那么拷貝操作會失敗。

          要注意的是拷貝目錄時,目錄中的內(nèi)容并沒有被拷貝過去,新生成的目錄會是一個空目錄。要想將目錄中的內(nèi)容一起拷貝過去,只有自己編程了。

          在拷貝符號鏈接時,默認的行為是拷貝符號鏈接指向的目的文件或目錄。如果需要拷貝符號鏈接本身,需要指定NOFOLLOW_LINKS REPLACE_EXISTING選項。

          CopyTo方法接受CopyOption類型的varargsCopyOption是一個接口,目前有兩個實現(xiàn)類:StandardCopyOptionLinkOptionCopyTo方法能夠支持的選項有:

          * REPLACE_EXISTING – 當要拷貝的是文件是,如果目標文件已經(jīng)存在,則覆蓋目標文件。如果要拷貝的是目錄,當目標目錄已經(jīng)存在時,如果目標目錄為空,覆蓋目標目錄;如果目標目錄不為空,拋出FileAlreadyExistsException。如果要拷貝的是符號鏈接,那么拷貝符號鏈接本身。

          * COPY_ATTRIBUTES – 連文件或目錄的屬性一起拷貝。不同的文件系統(tǒng)和平臺支持不同的文件屬性,但是所有的文件系統(tǒng)和平臺都支持最后修改時間這個屬性。

          * NOFOLLOW_LINKS – 如果要拷貝的是符號鏈接,直接拷貝符號鏈接本身。

          下面是使用copyTo的代碼例子:

          import static java.nio.file.StandardCopyOption.*;

          try {
              path.copyTo(newPath, REPLACE_EXISTING,     COPY_ATTRIBUTES);
          catch (IOException x) {
              
          //Logic for error condition
              System.err.println(x);
              
          return;
          }


          移動操作

          Path還提供了moveTo方法來移動文件或目錄。如果沒有設(shè)置REPLACE_EXISTING選項,那么當目標文件或目錄存在時,操作會失敗。

          空目錄能夠被移動,但是如果目錄不為空,是否能夠移動目錄要取決于是否能夠不移動目錄的內(nèi)容。例如在Windows系統(tǒng)下,如果是同一個硬盤分區(qū)內(nèi)的移動,就可以成功,但是如果是不同硬盤分區(qū)之間的移動,就會失敗,會拋出FileSystemException異常。同時要注意的是,目的目錄的父目錄一定要存在,否則會拋出NoSuchFileException。例如將c:"temp"test移動到c:"save"test,如果c:"save目錄不存在,則會拋出異常。

          MoveTo方法也接受可變數(shù)量的參數(shù),其支持的選項有:

          REPLACE_EXISTING – 覆蓋已經(jīng)存在的文件或目錄。如果目標文件/目錄是一個符號鏈接,那么該鏈接會被覆蓋,但是起指向的文件或目錄不會受到影響。 * ATOMIC_MOVE – 移動操作是一個原子操作。如果文件系統(tǒng)不支持移動的原子操作,會拋出異常。原子操作能夠保證當你移動一個文件到一個目錄中時,監(jiān)視該目錄的進程得到的是一個完整的文件。

          下面是使用moveTo方法的例子

          import static java.nio.file.StandardCopyOption.*;

          try {
              path.moveTo(newPath, REPLACE_EXISTING);
          catch (IOException x) {
              
          // Logic for error condition
              System.err.println(x);
              
          return;
          }


          posted on 2010-03-30 10:32 afrag 閱讀(427) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
           
          Copyright © afrag Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 鄂温| 赫章县| 乌兰察布市| 乐昌市| 曲周县| 德江县| 玉林市| 金华市| 茶陵县| 和平县| 吐鲁番市| 林甸县| 平顶山市| 吴忠市| 大悟县| 石阡县| 会宁县| 东港市| 体育| 玛沁县| 延长县| 凌云县| 安远县| 稷山县| 灵石县| 翁源县| 隆尧县| 盐源县| 民县| 淳化县| 文水县| 沈丘县| 江达县| 南漳县| 渝北区| 拉孜县| 靖远县| 甘德县| 朝阳区| 孟津县| 博兴县|