为什么文件重命名会在java中失败

时间:2010-03-03 15:12:21

标签: java

我有以下Java代码片段:

File directoryToMoveTo = new File(file.getParent()+"_TEMP");
boolean success = file.renameTo(new File(directoryToMoveTo,file.getName()));
if (!success){
    logger.warn("Failed to move [%s] to temp Directory.");
}

文件作为参数传递给方法,并且是这样获得的文件数组之一:

File[] files = directory.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        logger.debug(String.format("Testing file [%s]",name));
        boolean passed = name.endsWith(getFileDescription().getFilePattern());
        logger.debug(String.format("Passed [%s]",passed));
        return passed;
    }
});

为什么在第一个片段中成功为假?

我在另一个文件上单独尝试了这个代码,它似乎有效。

7 个答案:

答案 0 :(得分:6)

明显的情况:

  • 目标文件已存在
  • 目标目录不存在
  • 目标目录位于不同的文件系统上
  • 目标目录是只读的(或者至少是当前用户没有写访问权限)

期望那些至少可能会失败的(JavaDoc明确表示很多这种行为都依赖于操作系统) - 你试过吗?

答案 1 :(得分:3)

我发现了问题。这是因为我复制的目录不存在。

围绕这个if语句工作:

if (directoryToMoveTo.exists() || directoryToMoveTo.mkdir()){ }

答案 2 :(得分:1)

原版不存在? 已经是目标路径上的文件? Destinatination路径不存在? 源文件只读?

只是一些想法

答案 3 :(得分:1)

我能想到:

  • 目标目录不存在
  • 没有足够的访问权限(目标目录写保护)
  • 目标目录的数据分区上没有足够的可用空间
  • ...

答案 4 :(得分:1)

即使您关闭文件,该文件仍可能仍处于打开状态:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6266377

答案 5 :(得分:0)

不要忘记您可能不被允许编写/更改/重命名文件 在Windows中几乎没有问题,但在Unix环境中很常见。

答案 6 :(得分:0)

要找到它无法正常工作的确切原因,您可以System.out.println这些路径并尝试从操作系统级别移动它们。这将很好地说明为什么它不起作用。