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.这有什么原因吗?看起来 dir 在我使用重命名后没有链接到同一个目录。
原因是在您的第一个代码中,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(( 方法。