安卓系统中的批量/通配符文件删除

3

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

有没有一种方法可以删除非空文件夹?或者,有没有一种方法可以通过通配符名称指定多个文件并在一个API调用中删除它们?

我已经了解了File.listFiles()File.delete()的所有内容;实现这个功能本身很容易;我现在追求的是性能。

编辑:也许从C语言?我已经在项目中拥有一个NDK库-是否有一个支持此类操作的NDK支持系统调用?


2
请记住,您想要的是不现实的。可能有比迭代文件更简单的API,但无论如何,它都会很慢,因为我们谈论的是闪存,以及大多数设备上的YAFFS2文件系统。来自Java端的开销将在实际执行文件系统更改所需的时间中完全丢失。为什么不在后台线程中完成工作呢? - CommonsWare
如果在内存中缓存文件对象或指向这些文件的文件名是现实的话,您可以节省一些时间。但是,闪存等等...我认为这不会带来巨大的优势。 - MJB
@CommonsWare:对于期望一次扫描目录比N次更快执行,这有什么不切实际的吗?此外,即使是闪存也是按几KB的块工作的吧?如果是这样,一次性更改/写出一个块中的多个/所有文件记录比每个文件的更改/写出会更快执行。 - Seva Alekseyev
“期望一次遍历目录比N次更快有什么不现实的地方?”--这很可能,但根据实现方式,您可能看不到实质性的节省。“一次性更改块中的几个/所有文件记录并进行一次写出比每个文件的更改/写出更快?”--这是可以想象的。我认为没有任何调用可以实现您的目标,而且在SDK级别上我想不到任何有帮助的东西。 - CommonsWare
1个回答

0

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


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