【问题标题】:Fast delete folder with more than 30000 images in AndroidAndroid中超过30000张图片的快速删除文件夹
【发布时间】:2025-12-17 06:30:01
【问题描述】:

我必须删除包含超过 30000 张图像的文件夹。 我里面有“.nomedia”文件,以防止一直扫描。 试图删除所有文件我必须检查每个文件的文件名。如果我错过了这个检查 - '.nomedia' 文件将被删除。如果这发生在图像之前 - 这将导致巨大的性能损失。 知道如何解决这个问题吗?

更新:

有没有人知道在不使用“.nomedia”的情况下隐藏图像的方法? 我可以保存带有假扩展名的文件,但我不确定这是否有效。

更新:

实际上测试向我展示了这个结果:检查名称使删除速度慢了大约 50%。问题不在于检查代码,而在于系统扫描文件夹:(

【问题讨论】:

  • "我里面有 '.nomedia' 文件以防止一直扫描。" - 什么是一直在扫描? Android 设备上不应该有任何东西在不断扫描媒体文件夹。
  • 我正在为地图缓存添加图像。当我拖动地图时 - 每次拖动大约 10-15。如果 android 扫描文件夹中的所有新图像 - 这是一场灾难。
  • @MisterSquonk:一些公司,比如三星和索尼,有系统应用程序可以扫描所有媒体文件夹,并在设备上存在的所有媒体上构建某种库。
  • @MisterSquonk 我的情况是一样的。我会尝试使用未知的文件扩展名。
  • 你可以考虑运行"rm *"(不会删除java.lang.Process中以'.'开头的东西

标签: android file operating-system directory


【解决方案1】:

您确定仅检查文件名的过程需要很长时间吗? 为了删除文件,我想你还是需要File 对象。已经有了File 对象,执行以下操作的性能成本是多少?

".nomedia".equals(file.getName());

实际删除 (file.delete()) 的成本应该比字符串比较高出几个数量级。

您测量过检查文件名的实际时间吗?

【讨论】:

  • 你是如何进行测试的? 30000 次字符串比较的累计时间是多少?
  • 实际上测试向我展示了这个结果:检查名称会使删除速度慢约 50%。问题不在检查代码中,而是在系统扫描文件夹中:(
【解决方案2】:

我暂时的解决方案是:

  1. 用图像重命名文件夹。
  2. 为包含“.nomedia”文件的图像创建新文件夹。
  3. 启动后台线程以删除旧文件夹。

这种方式并不比以前更快,但允许用户立即继续工作。 当然有一个假设 - 用户必须知道删除和清理占用的空间暂时还没有完成。

【讨论】:

  • 其实非常聪明的解决方案。要加快实际删除过程,请查看使用rm -rf 的答案:*.com/a/58420953/293280 我们发现它比使用FileUtils 快几倍。