代码之家  ›  专栏  ›  技术社区  ›  Hristo

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

  •  8
  • Hristo  · 技术社区  · 15 年前

    不管我上一篇文章如何,我已经找到了问题的根源。我在用

    a.renameTo(b)
    

    当b不存在时。它不存在的原因是因为有一个符号链接,所以如果B是 /usr/name/folder/file 那么B真的是 /mnt/MountTest 因为symlink指向那个目录。

    因此,问题是,是否有另一种使用字符串值重命名Java文件的方法呢? 如果不是,如何以不同的方式执行此重命名过程?

    5 回复  |  直到 8 年前
        1
  •  5
  •   Dean J    15 年前

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

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

        2
  •  5
  •   Rahul Shelke    10 年前

    重命名文件也是跨文件系统的一个大问题。见 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756 . bug报告的注释者发布了一些示例代码,并指出您可以使用process.exec。Apache Commons IO和Google Guava都有安全移动文件的实用程序:

        3
  •  4
  •   Trevor Harrison    15 年前

    我觉得你把事情搞混了。java.util.file并不代表某个文件系统上的文件。它表示文件的路径。

        4
  •  3
  •   Jonathan Feinberg    15 年前

    问题不在于涉及符号链接;问题在于不能跨文件系统自动重命名。元问题是Java文件操作设计得不好,并且不抛出适当的异常,并且在某些失败时不提供错误代码。

        5
  •  1
  •   Poindexter    15 年前

    怎么样:

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