【问题标题】:Fastest way to move a directory in Android?在 Android 中移动目录的最快方法是什么?
【发布时间】:2012-04-26 01:26:32
【问题描述】:

在 Android 中移动目录的最快方法是什么?在大多数(但不是所有)情况下,源和目标位于同一个 sdcard 文件系统上。

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

对于每个文件,我当前运行(带有额外的异常处理):

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

这似乎很慢,而且我期望的大量计算工作可能是原始文件系统级别的简单即时“节点修改”​​。

【问题讨论】:

    标签: android


    【解决方案1】:

    只要文件在同一个文件系统上,您实际上就可以移动它们File#renameTo(File)

    if (!fileFrom.renameTo(fileTo)) {
        copy(fileFrom, fileTo);
        // delete(fileFrom);
    }
    

    【讨论】:

    • 您可以这样做,但请检查返回值是否为假。如果为假,则复制文件/文件夹。
    • 接受为答案。谢谢你。 10 分钟的副本变成了 10 秒的副本。 ;-)
    • 您没有定义方法副本。
    • 你绝对需要复制方法吗?我的意思是 renameTo 不是已经移动文件了吗?复制方法的目的是什么?它应该做什么?你没有定义它。
    • @coolcool1994 renameTo 只能重命名 {files |目录} 如果fileFromfileTo 在同一个文件系统中。就像您无法将硬盘上的文件重命名到某个 USB 拇指驱动器上一样。在这种情况下,该方法返回false,您必须手动将所有内容复制到新位置,然后在旧位置删除。 copy & delete 的示例可以在这里找到:subversivebytes.wordpress.com/2012/11/05/…
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多