【问题标题】:Mass/wildcarded file delete on AndroidAndroid上的批量/通配符文件删除
【发布时间】:2011-04-30 21:32:09
【问题描述】:

我有一个包含数百个(最多约 6000 个)小文件的文件夹。我想快速删除该文件夹(或整个文件夹)中的所有文件。最好在 O(1) 时间内。

有没有办法删除非空文件夹?或者,有没有办法在一个 API 调用中删除多个文件(由通配符名称指定)

File.listFiles()File.delete() 我都知道;实现这个功能本身很容易;我现在正在表演。

编辑:也许来自 C?我在项目中已经有一个 NDK 库 - 是否有一个支持 NDK 的系统调用来实现这种效果?

【问题讨论】:

  • 请记住,您想要的东西是不切实际的。可能有比迭代文件更简单的 API,但无论您如何完成它都会很慢,因为这是我们正在谈论的闪存,以及大多数设备上的 YAFFS2 文件系统。 Java 方面的开销将在实际执行文件系统更改所需的时间内完全消失。为什么不在后台线程中完成工作?
  • 如果在内存中保存指向这些文件的文件对象或文件名的缓存是现实的,您可以节省一些时间。但是,是的,闪存等......不要认为这会是一个巨大的胜利
  • @CommonsWare:期望一次遍历目录会比 N 次遍历更快,这有什么不切实际的?此外,甚至闪存都不能以几 KB 的块为单位工作吗?如果是这样,一次更改一个块中的多个/所有文件记录将与一个写出相比执行每个文件的更改/写出更快?
  • “期望一次遍历目录会比 N 次遍历更快,这有什么不切实际的?” ——这很有可能,但您可能看不到具体实施情况的材料节省。 “一次更改一个块中的多个/所有文件记录将与一个写出比对每个文件的更改/写出执行得更快?” ——这是可以想象的。我不认为您可以进行任何调用来达到您的目的,而且在 SDK 级别肯定没有什么可以帮助我。

标签: java android performance filesystems


【解决方案1】:

正如 CommonsWare 所说,即使在 NDK 中使用 C 语言,您也无法避免删除/取消引用文件需要时间并且无法规避的事实。只需将其放入后台任务中即可释放 UI 并希望获得最好的结果。

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 2023-04-06
    • 2011-02-03
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2013-02-17
    • 2011-02-19
    • 2019-02-10
    相关资源
    最近更新 更多