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看起来没有链接到同一目录。
答案 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()方法。