嘗試將文件從一個目錄移動到另一個目錄時出現錯誤。經過多次調試後,我通過編寫一個小型實用程序來定位錯誤,該程序只是將文件從一個目錄移動到另一個目錄(下面的代碼)。事實證明,在本地文件系統上移動文件時工作正常,嘗試將文件移動到另一個文件系統失敗。當生成的文件位於另一個文件系統上時,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"));
}
}
Errr ... didnt加載你的答案,而我組成了我的:),moveFile是救星+1 – mprabhat
你對Apache Commons的建議正是我的下一步。感謝您提供的信息豐富的答案,實際回答這兩個問題! – oligofren
要添加上面已經提供的出色答案,如果oldpath和newpath不在同一個掛載的文件系統上,重命名中使用的系統調用將返回EXDEV。實際上,諸如「mv」之類的程序通過執行顯式拷貝和刪除操作來處理這種情況。 – ghostkadost