2010-01-06 87 views
8

不管我上一篇文章,我發現問題的根源。我正在使用重命名文件而不使用renameTo() - Java

a.renameTo(b) 

當b不存在時。它不存在的原因是因爲有一個符號鏈接,所以如果b是/usr/name/folder/file,那麼b實際上是/mnt/MountTest,因爲符號鏈接是該目錄。

所以問題是,是否有一種替代方法來使用字符串值在Java中重命名文件? 如果不是,這個重命名過程如何以不同的方式完成?

回答

5

重命名會重命名它...如果它在同一個文件系統上。

如果renameTo()失敗,則需要將其複製到新位置,然後刪除原始位置。

3

問題不在於涉及符號鏈接;問題是你不能自動重命名文件系統。元問題是Java文件操作設計得不好,並且不會拋出適當的異常,並且在失敗時不提供錯誤代碼!

1

如何:

a.renameTo(new File("/your/path/here/"); 
+0

這不會起作用,因爲該文件不會在新的文件路徑存在...重命名被用來模仿「mv」,本質上是將文件從一個目錄移動到另一個目錄 – Hristo 2010-01-06 17:00:13

+1

@Hristo:實際上,這正是我引起的問題:人們將renameTo描述爲「mv」 。 mv知道文件系統,而renameTo不知道。如果您嘗試從一個磁盤/分區轉移到另一個磁盤/分區,它將作爲cp和rm序列,而renameTo不會。 – Ken 2011-09-07 15:56:45

4

我認爲你是混亂的事情。 java.util.File不代表某個文件系統上的文件。它代表一個文件的路徑。

5

重命名文件在文件系統間也存在很大問題。見http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756。錯誤報告的評論者發佈了一些示例代碼,並指出可以使用Process.exec。雙方的Apache下議院IO和和谷歌番石榴有工具,用於安全地移動文件,以及:

+1

Apache鏈接已死,請更新。 – saikosen 2014-07-10 06:54:58

相關問題