2013-07-03 42 views
6

我正在自動執行一系列的操作,我們爲了獲得一些時間而做了很多操作。這包括移動文件並開始一些批次。Java 7 ATOMIC_MOVE給出例外

在這種特殊情況下,我試圖將文件從一個位置複製到另一個位置。所有工作正常,直到我嘗試使用ATOMIC_MOVE複製選項。這是我的代碼:

private void copyToDropFolder(Datafile datafile, String company) throws IOException{ 
    Path datafilePath = datafile.getDataPath(); 
    String dropFolder = locations.getLocationFor("default"); 
    Path dropPath = Paths.get(dropFolder, company.toUpperCase(),locations.getLocationFor("drop"), datafile.getFileName()); 
    Files.copy(datafilePath, dropPath, StandardCopyOption.ATOMIC_MOVE); 
} 

我已經檢查並解決了datafilePath和dropPath的位置,它們都是有效的。我已經嘗試了其他2個標準複製選項,並且程序運行良好。只有ATOMIC_MOVE纔會得到UnsupportedOperationException。並不是我絕對需要這個具體的選擇,但我很好奇爲什麼我不會工作。我無法找到關於這個問題的任何其他報告。我在Windows 7機器上這樣做。

我錯過了什麼嗎?或者ATOMIC_MOVE只是不被支持?

+0

你爲什麼試着'ATOMIC_MOVE'做一個_copy_操作?這根本不符合邏輯。或者你想使用'link()'? – fge

+0

你正在嘗試使用哪種文件系統類型?這可能是該操作不受支持(http://docs.oracle.com/javase/tutorial/sesential/io/move.html) –

+0

@fge你是對的......當你以這種方式看待它時,它沒有任何意義。但是在一個名爲StandardCopyOption的枚舉中有一個ATOMIC_MOVE選項也沒什麼意義:/你指出很好,我沒有這樣想。至於現在,我真的不想用它,我只是試了一下,它失敗了。我很困惑,爲什麼它會失敗。 – anothernoc

回答

14

由於API says,ATOMIC_MOVE不支持copy(),但只支持move()

+0

謝謝!我錯過了那一個。我完全專注於[this](http://docs.oracle.com/javase/7/docs/api/java/nio/file/StandardCopyOption.html) – anothernoc

2

ATOMIC_MOVE用於移動操作,而不是複製操作。

另一方面,您可以使用Files.createLink()創建所謂的「硬鏈接」。也有createSymbolicLink(),但這可能不是你想要的。

當然,.createLink()只有當源路徑和目標路徑位於同一個文件系統上時纔有效。