但是,当我在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"); } }
编辑:解决了它.我很遗憾浪费每个人的时间来愚蠢的事情.但是,我真的不认为如果不发表这篇文章,我会追踪到这一点.
解决方案是我实际上是循环遍历几个文件来移动.当输出表示失败然后程序停止,当我查看资源管理器时,只有第一个文件实际被移动,所以我认为它正在移动然后返回false.然而,问题是我使用了错误的变量作为索引,所以发生的事情是它确实成功地在索引0中移动文件然后当循环重复索引没有增加时所以它试图再次移动索引0因此失败了.
就像我说的那样,非常愚蠢,但感谢与我的关系.
解决方法
Many aspects of the behavior of this method are inherently
platform-dependent: The rename operation might not be able to move a
file from one filesystem to another,it might not be atomic,and it
might not succeed if a file with the destination abstract pathname
already exists. The return value should always be checked to make sure
that the rename operation was successful.
您可以使用apache.commons.io库,其中包括FileUtils.moveFile()或JDK 7中的Files.move()方法.