对文件使用重命名更改内容


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(( 方法。

相关内容

  • 没有找到相关文章

最新更新