2010-01-06 67 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