在文件上使用renameTo会更改内容

时间:2017-08-18 11:36:28

标签: java android path directory

File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);

假设/ dir1 /包含5个文件。此代码将打印0.但是,如果我将代码更改为“

File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
dir = new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);

它将打印正确的值:5。是否有原因?在使用renameTo之后,dir看起来没有链接到同一目录。

1 个答案:

答案 0 :(得分:2)

原因是您的第一个代码dir仍然指向目录dir1而不是dir2

但是,在以下代码中:

File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
dir = new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);

dir现在指向dir2,因此您获得了正确的值。

我建议你避免使用Java的File.renameTo(),因为它有问题,特别是在Windows上。正如API文档所说:

  

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

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