不使用renameTo()重命名文件 - Java

Hri*_*sto 8 java symlink rename file

无视我的上一篇文章,我发现了问题的根源.我正在使用

a.renameTo(b)
Run Code Online (Sandbox Code Playgroud)

当b不存在时.它不存在的原因是因为存在符号链接,所以如果b是/usr/name/folder/file,则b实际上是/mnt/MountTest因为符号链接到该目录.

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

Dea*_*n J 5

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

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


big*_*lep 5

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