【发布时间】:2011-01-02 03:26:36
【问题描述】:
忽略我上一篇文章,我找到了问题的根源。我正在使用
a.renameTo(b)
当 b 不存在时。它不存在的原因是因为有一个符号链接,所以如果 b 是 /usr/name/folder/file,那么 b 真的是 /mnt/MountTest,因为符号链接指向那个目录。
所以问题是,有没有另一种方法可以使用字符串值在 Java 中重命名文件? 如果不是,这个重命名过程如何以不同的方式完成?
【问题讨论】:
忽略我上一篇文章,我找到了问题的根源。我正在使用
a.renameTo(b)
当 b 不存在时。它不存在的原因是因为有一个符号链接,所以如果 b 是 /usr/name/folder/file,那么 b 真的是 /mnt/MountTest,因为符号链接指向那个目录。
所以问题是,有没有另一种方法可以使用字符串值在 Java 中重命名文件? 如果不是,这个重命名过程如何以不同的方式完成?
【问题讨论】:
问题不在于涉及符号链接;问题是您不能跨文件系统自动重命名。元问题是 Java File 操作设计得很糟糕,不会抛出适当的异常,并且在某些事情失败时不提供错误代码!
【讨论】:
怎么样:
a.renameTo(new File("/your/path/here/");
【讨论】:
我认为你把事情搞糊涂了。 java.util.File 不代表某些文件系统上的文件。它表示文件的路径。
【讨论】:
重命名会重命名它...如果它在同一个文件系统上。
如果 renameTo() 失败,您需要将其复制到新位置,然后删除原始位置。
【讨论】:
重命名文件也是跨文件系统的大问题。见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756。错误报告的评论者发布了一些示例代码,并指出您可以使用 Process.exec。 Apache Commons IO 和 Google Guava 都有用于安全移动文件的实用程序:
【讨论】: