8

忽略我上一篇文章,我找到了问题的根源。我在用着

a.renameTo(b)

当 b 不存在时。它不存在的原因是因为存在符号链接,所以如果 b 是/usr/name/folder/file,那么 b 确实是/mnt/MountTest因为符号链接指向该目录。

所以问题是,是否有另一种方法可以使用字符串值在 Java 中重命名文件?如果不是,这个重命名过程如何以不同的方式完成?

4

5 回答 5

5

重命名会重命名它......如果它在同一个文件系统上。

如果 renameTo() 失败,您需要将其复制到新位置,然后删除原始位置。

于 2010-01-06T17:19:06.497 回答
5

跨文件系统重命名文件也存在很大问题。请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756。错误报告的评论者发布了一些示例代码,并指出您可以使用 Process.exec。Apache Commons IO 和 Google Guava 都具有用于安全移动文件的实用程序:

于 2010-05-14T16:00:12.877 回答
4

我认为你在混淆事情。java.util.File 不代表某些文件系统上的文件。它表示文件的路径。

于 2010-01-06T17:03:59.100 回答
3

问题不在于涉及符号链接;问题是您不能跨文件系统自动重命名。元问题是 Java 文件操作设计得很糟糕,并且不会抛出适当的异常,并且在发生故障时不提供错误代码!

于 2010-01-06T16:52:46.493 回答
1

怎么样:

a.renameTo(new File("/your/path/here/");
于 2010-01-06T16:53:42.397 回答