Android中超过30000张图片的快速删除文件夹

Posted

技术标签:

【中文标题】Android中超过30000张图片的快速删除文件夹【英文标题】:Fast delete folder with more than 30000 images in Android 【发布时间】:2012-04-02 15:10:02 【问题描述】:

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

更新:

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

更新:

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

【问题讨论】:

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

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

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

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

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

【讨论】:

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

我暂时的解决方案是:

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

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

【讨论】:

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

以上是关于Android中超过30000张图片的快速删除文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET 删除目录中超过 3 个月的文件

CMD 删除特定文件夹中超过 X 天的文件

是否可以选择删除主题中超过一小时的 kafka 主题旧消息

Python脚本:删除文件夹下的重复图片,实现图片去重

删除 NSDictionaries 中超过 100.000 公里的键和值

删除列中超过 30 天的所有行的过程