【问题标题】:Using renameTo on File changes the content在 File 上使用 renameTo 更改内容
【发布时间】:2018-01-27 02:03:41
【问题描述】:
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 似乎没有链接到同一个目录。

【问题讨论】:

    标签: java android path directory


    【解决方案1】:

    原因是在您的第一个代码中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() 方法。

    【讨论】:

      猜你喜欢
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2014-10-19
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多