java file.renameTo()重命名文件但返回false.为什么?

Mas*_*son 6 java file-io

问题是我需要在我的逻辑的其余部分工作之前移动文件,所以当方法返回false时我停止执行.

但是,当我在Windows资源管理器中检查文件时,它有一个新名称并且它已移动.

只是好奇为什么会这样.

这里是一些示例代码,我只是试图重新创建该问题.它几乎是一样的,而且工作正常.

File testfile = new File("TestFile");

    if(!testfile.exists()){

        testfile.mkdirs();

    }

    File sample = new File("sample.txt");

    if(sample.exists()){

        boolean success = sample.renameTo(new File(testfile.getPath() + "\\" + sample.getName()));

        if(success){

            System.out.println("Moved");

        }
        else{

            System.out.println("Failed");

        }

    }
Run Code Online (Sandbox Code Playgroud)

编辑:解决了它.我很遗憾浪费每个人的时间来愚蠢的事情.但是,我真的不认为如果不发表这篇文章,我会追踪到这一点.

解决方案是我实际上是循环遍历几个文件来移动.当输出表示失败然后程序停止,当我查看资源管理器时,只有第一个文件实际被移动,所以我认为它正在移动然后返回false.然而,问题是我使用了错误的变量作为索引,所以发生的事情是它确实成功地在索引0中移动文件然后当循环重复索引没有增加时所以它试图再次移动索引0因此失败了.

就像我说的那样,非常愚蠢,但感谢与我的关系.

Gab*_*tti 13

Java File.renameTo()似乎是有问题的,特别是在Windows上.正如API文档所说:

此方法行为的许多方面本质上依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能不会成功已经存在.应始终检查返回值以确保重命名操作成功.

您可以使用apache.commons.io库,其中包含FileUtils.moveFile()或者也包括Files.move()JDK 7中的方法.