在Android中移动目录的最快方法是什么?

4

在 Android 中最快的移动目录的方式是什么?在大多数情况下,源和目标位于同一个 sdcard 文件系统中,但并非所有情况都是如此。

目前,我的代码遍历整个目录结构,并将每个文件的内容复制到新位置具有相同名称的新文件中。然后它验证文件大小是否匹配,最后删除源文件。

对于每个文件,我当前运行以下操作(附加异常处理):

    try{
      source = new FileInputStream(fileFrom).getChannel();
      destination = new FileOutputStream(fileTo).getChannel();
      destination.transferFrom(source, 0, source.size());
    } finally {
      source.close();
      destination.close();
    }

这似乎很慢,而且在我期望可能是一个简单的原始文件系统级别的即时“节点修改”方面需要太多的计算工作。
1个回答

8
只要文件在同一文件系统上,您实际上可以移动它们File#renameTo(File)
if (!fileFrom.renameTo(fileTo)) {
    copy(fileFrom, fileTo);
    // delete(fileFrom);
}

2
你可以这样做,但要检查返回值是否为false。如果是false,则复制文件/文件夹。 - Matt Wolfe
答案已被接受。谢谢。10分钟的复制变成了10秒钟的复制。;-) - starvingmind
您没有定义copy方法。 - coolcool1994
1
你真的需要复制方法吗?我的意思是,renameTo不已经移动文件了吗?拥有复制方法的目的是什么?它应该做什么?你没有定义它。 - coolcool1994
2
@coolcool1994 如果fileFromfileTo不在同一文件系统中,则renameTo仅能重命名{文件|目录}。例如,您无法将硬盘上的文件重命名为USB闪存驱动器上的文件。在这种情况下,该方法返回false,您必须回退到手动复制所有内容到新位置,并在旧位置删除。可以在此处找到copydelete示例:https://subversivebytes.wordpress.com/2012/11/05/java-copy-directory-recursive-delete/ - zapl
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接