Files.copy(source, target, CopyOption...)
特性source, target, CopyOption...)
1 預設如果target的檔名已存在,會拋出FileAlreadyExistsException2 預設狀況下Copy symbolic link 會copy原始檔案而不會 copy link檔
3 copy目錄並不會將目錄內的檔案一起copy!
4 CopyOption 設定成 StandardCopyOption.REPLACE_EXISTING
a copy 檔案名稱相同時會覆蓋
b copy目錄時target不是空目錄會拋出java.nio.file.DirectoryNotEmptyException
5 COPY_ATTRIBUTES 在copy時會將source的權限等資料一起copy除了 last-modified-time
6 NOFOLLOW_LINKS copy時會COPY link不copy資料來源!
7 如果source目錄不存在會顯示java.nio.file.NoSuchFileException
8 在copy的CopyOption中不可使用StandardCopyOption.ATOMIC_MOVE參數會產生錯誤java.lang.UnsupportedOperationException: Unsupported copy option
public static Path move(Path source,
Path target,
CopyOption... options)
大致與COPY雷同!
除了~
1 如果move是link移動的事link不是資料來源
2 move目錄會將內部的檔案一起移動
類似linux內的move行為
3 If
1 預設都不會覆蓋target檔案除非屬性設為REPLACE_EXISTING
2 move一個符號鏈接,鏈接本身會被移動,而不是目標文件。重要的是要注意,copy預設方法的情況下,如果指定一個符號鏈接,複製鏈接的目標,而不是鏈接本身。
3move可移動有內容的資料夾,如果成功移動資料夾內容也被移動
4 move可指定ATOMIC_MOVE copy option 如未指定當按移動錯誤會產生未知的狀態!
move 與 copy語法跟我們在linux下有些不同
如:我想將/Users/user/tmp2 copy 或 move 到 /Users/user/tmp下可以這樣寫
cp -r /Users/user/tmp2 /Users/user/tmp
但java程式中不可這樣寫
Path1 = /Users/user/tmp2
Path2 = /Users/user/tmp
copy(Path1, Path2);
程式會認為你要將tmp覆蓋成tmp2而不是將tmp2放至於tmp目錄下正確寫法如下
Path1 = /Users/user/tmp2
Path2 = /Users/user/tmp/tmp2
copy(Path1, Path2);
3 If
Files.move(...) is called with StandardCopyOption.COPY_ATTRIBUTES anUnsupportedOperationException is thrown.move VS copy
1 預設都不會覆蓋target檔案除非屬性設為REPLACE_EXISTING
2 move一個符號鏈接,鏈接本身會被移動,而不是目標文件。重要的是要注意,copy預設方法的情況下,如果指定一個符號鏈接,複製鏈接的目標,而不是鏈接本身。
3move可移動有內容的資料夾,如果成功移動資料夾內容也被移動
4 move可指定ATOMIC_MOVE copy option 如未指定當按移動錯誤會產生未知的狀態!
move 與 copy語法跟我們在linux下有些不同
如:我想將/Users/user/tmp2 copy 或 move 到 /Users/user/tmp下可以這樣寫
cp -r /Users/user/tmp2 /Users/user/tmp
但java程式中不可這樣寫
Path1 = /Users/user/tmp2
Path2 = /Users/user/tmp
copy(Path1, Path2);
程式會認為你要將tmp覆蓋成tmp2而不是將tmp2放至於tmp目錄下正確寫法如下
Path1 = /Users/user/tmp2
Path2 = /Users/user/tmp/tmp2
copy(Path1, Path2);
作者已經移除這則留言。
回覆刪除