甜咖啡

          我的IT空間

          在Java 7里如何對文件進行操作

          下面的代碼片段是由經過驗證的程序修改而來。觀察這些代碼片段你會發現,跟以前的版本相比,在Java7里,文件相關的操作變得簡單的多了。通過使用新的Files類里提供的各種方法,你可以只用一行代碼就能完成下列的文件操作:

          • 創建文件
          • 刪除文件
          • 復制文件
          • 文件移動/改名

          這篇文件是以你對Java7里提供的新的Path類很熟悉為前提,如果你不熟悉這個類,這里就簡單說一句,Path是文件系統里對位置的一個邏輯概念,例如c:\ 和../foobar.txt都是Path。

          創建和刪除文件

          下面的代碼片段向你展示的是用 Files.createFile (Path target) 方法創建文件的基本用法。

          1. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
            Path file = Files.createFile (target);  

          很多時候,出于安全的原因,你可能希望在創建的文件上設置一下屬性,例如:是否可讀/可寫/寫執行。這些屬性依賴于文件系統的種類,你需要使用跟文件系統相應的權限輔助類來完成這種操作。例如,PosixFilePermission和PosixFilePermissions為POSIX文件系統設計的。下面的是在POSIX文件系統上的文件設置讀寫權限的用法。

          1. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
            Set<PosixFilePermission> perms = PosixFilePermissions.fromString ("rw-rw-rw-");
            FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute (perms);
            Files.createFile (target, attr);

          這個java.nio.file.attribute包里提供了很多關于FilePermission的類。

          警告當創建一個帶有權限屬性的文件時,請注意包含這個文件的文件夾是否有權限的強制約束。例如,你會發現,由于這些限制,盡管你給創建的文件指定了rw-rw-rw權限,實際創建的結果卻是rw-r–r–。

          刪除文件更簡單,使用Files.delete (Path)這個方法。

          1. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
            Files.delete (target);  

          拷貝和移動文件

          下面的代碼向你展示的是使用Files.copy (Path source, Path target)方法做文件拷貝的基本用法。

          1. Path source = Paths.get ("C:\\My Documents\\Stuff.txt");  
          2. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
            Files.copy (source, target);  

          經常的,在拷貝文件的過程中你可能希望指定一些操作設置。在Java7里,你可以通過使用StandardCopyOption enum來設置這些屬性。下面看一個例子。

          1. import static java.nio.file.StandardCopyOption.*;  
          2. Path source = Paths.get ("C:\\My Documents\\Stuff.txt");  
          3. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
          4. Files.copy (source, target, REPLACE_EXISTING);  

          拷貝操作時可以使用的屬性還包括COPY_ATTRIBUTES (保留文件屬性) 和ATOMIC_MOVE (確保移動事務操作的成功,否則進行回滾)。

          移動文件的操作跟拷貝很相似,使用Files.move (Path source, Path target)方法。

          同樣,你也可以指定移動操作的屬性,使用Files.move (Path source, Path target, CopyOptions...) 方法里的參數來設置。

          1. import static java.nio.file.StandardCopyOption.*;  
          2. Path source = Paths.get ("C:\\My Documents\\Stuff.txt");  
          3. Path target = Paths.get ("D:\\Backup\\MyStuff.txt");
            Files.move (source, target, REPLACE_EXISTING,COPY_ATTRIBUTES);  

          可以看出,新的用于文件操作的NIO.2 API 非常便于使用。

          posted on 2012-04-16 10:25 甜咖啡 閱讀(234) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(1)

          我參與的團隊

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 松阳县| 浦城县| 章丘市| 宜章县| 博乐市| 阳西县| 黔东| 常山县| 凤冈县| 榆社县| 广水市| 镇远县| 新巴尔虎左旗| 互助| 阿瓦提县| 乌拉特前旗| 浠水县| 华容县| 休宁县| 西乡县| 米脂县| 吉隆县| 兴安县| 新邵县| 林口县| 顺平县| 冕宁县| 天台县| 鄂尔多斯市| 康平县| 长顺县| 禹城市| 河津市| 肇庆市| 尉犁县| 朝阳县| 彭泽县| 黎平县| 城市| 专栏| 扎兰屯市|