2012-05-10 73 views
7

嘗試將文件從一個目錄移動到另一個目錄時出現錯誤。經過多次調試後,我通過編寫一個小型實用程序來定位錯誤,該程序只是將文件從一個目錄移動到另一個目錄(下面的代碼)。事實證明,在本地文件系統上移動文件時工作正常,嘗試將文件移動到另一個文件系統失敗。當生成的文件位於另一個文件系統上時,Java移動(重命名)文件失敗

這是爲什麼?這個問題可能是特定於平臺的 - 我們在ext3上運行Linux,如果這很重要的話。

第二個問題;我是否應該使用類的renameTo()方法以外的東西?看起來好像這隻適用於本地文件系統。

測試(以root身份運行):

touch /tmp/test/afile 

java FileMover /tmp/test/afile /root/ 
The file move was successful 

touch /tmp/test/afile 

java FileMover /tmp/test/afile /some_other_disk/ 
The file move was erroneous 

代碼:

import java.io.File; 

public class FileMover { 
    public static void main(String arguments[]) throws Exception { 
     boolean success; 
     File file = new File(arguments[0]); 
     File destinationDir = new File(arguments[1]); 
     File destinationFile = new File(destinationDir,file.getName()); 
     success = file.renameTo(destinationFile); 
     System.out.println("The file move was " + (success?"successful":"erroneous")); 
    } 
} 

回答

16

File.renameTo文檔:

[...] 重命名操作可能不能夠將文件從一個文件系統移動到另一個文件系統 [...]

明顯的解決方法是通過打開新文件「手動」複製文件,將內容寫入文件並刪除舊文件。

您也可以嘗試Apache Commons的FileUtils.moveFile方法。

+0

Errr ... didnt加載你的答案,而我組成了我的:),moveFile是救星+1 – mprabhat

+0

你對Apache Commons的建議正是我的下一步。感謝您提供的信息豐富的答案,實際回答這兩個問題! – oligofren

+1

要添加上面已經提供的出色答案,如果oldpath和newpath不在同一個掛載的文件系統上,重命名中使用的系統調用將返回EXDEV。實際上,諸如「mv」之類的程序通過執行顯式拷貝和刪除操作來處理這種情況。 – ghostkadost

6

Javadoc救援:

這種方法的行爲的許多方面是天生 依賴於平臺的:重命名操作可能無法從一個文件系統移動 文件到另一個,它可能不是原子的,如果目標抽象路徑名爲 的文件已存在,則它可能不會成功。應始終檢查返回值以確保 重命名操作成功。

請注意,Files類定義移動方法以獨立於平臺的方式移動或重命名 文件。

1

從文檔:

重新命名此抽象路徑名錶示的文件。

這種方法的行爲的許多方面是天生 平臺依賴性:重命名操作可能無法從一個文件系統移動 文件到另一個,它可能不是原子,它 可能不是如果成功具有目標抽象路徑名稱 的文件已存在。應始終檢查返回值以確保 重命名操作成功。

如果你想不同的文件系統,你可以使用Apache的moveFile

-1

您伊德爾之間移動文件是錯誤 beause/some_other_disk /是相對URL,但完全網址,無法找到URL 我有例子

的java的FileMover d:\ Eclipse33_workspace_j2ee \測試的\ src \ A \ A.TXT d:\ Eclipse33_workspace_j2ee \測試\ SRC 文件移動成功

的java的FileMover d:\ Eclipse33_workspace_j2ee \測試的\ src \ A \ A.TXT \ Eclipse33_workspace_j2ee \測試\ SRC

文件移動是erronous

結果是網址是錯誤

+0

任何以'/'開頭的路徑都是一個絕對路徑(在unices上)。所以不行。查看上面的答案,找出真正解決問題的答案。 – oligofren

相關問題