You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中检索内存里最新创建的文件并将其删除

Android 检索最新创建文件的实现方案

前置权限要求

  • Android 13(API 33+):
    • 操作应用专属目录(/sdcard/Android/data/你的包名/):无需额外申请权限
    • 操作公共媒体目录:申请对应类型的媒体权限,例如图片需READ_MEDIA_IMAGES、视频需READ_MEDIA_VIDEO、音频需READ_MEDIA_AUDIO
  • Android 10 ~ 12(API 29 ~ 32):
    • 操作应用专属目录:无需权限
    • 操作公共目录:申请READ_EXTERNAL_STORAGE权限
  • Android 9及更低版本(API ≤28):
    • 所有存储读写操作都需要同时申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限

核心实现代码(Kotlin)

检索指定目录下最新创建的文件

fun getLatestCreatedFile(targetDir: File): File? {
    // 校验目标目录是否存在且可读
    if (!targetDir.exists() || !targetDir.isDirectory || !targetDir.canRead()) {
        return null
    }
    // 过滤出目录下的所有文件(排除子目录)
    val files = targetDir.listFiles { file -> file.isFile } ?: return null
    if (files.isEmpty()) {
        return null
    }
    // 按创建时间排序,API 26及以上可使用文件创建时间,低版本使用修改时间替代
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        files.sortedBy { 
            Files.readAttributes(it.toPath(), BasicFileAttributes::class.java).creationTime().toMillis() 
        }.last()
    } else {
        files.sortedBy { it.lastModified() }.last()
    }
}

调用示例(以检索下载目录最新文件为例)

// 获取公共下载目录
val downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val latestFile = getLatestCreatedFile(downloadDir)
// 删除文件
latestFile?.let { 
    // 若操作公共目录且Android 10及以上,需通过MediaStore API删除,直接delete仅适用于应用专属目录
    val deleteResult = it.delete() 
    if (deleteResult) {
        // 删除成功逻辑
    }
}

注意事项

  • Android 11及以上版本禁止直接访问存储根目录,仅可操作应用专属目录、公共媒体/下载目录,若需遍历全存储文件需要申请MANAGE_EXTERNAL_STORAGE特殊权限,仅文件管理器类应用可通过Google Play审核
  • 公共目录下的文件删除操作,Android 10及以上版本建议使用MediaStore的删除接口,避免直接调用delete()方法返回false的问题
  • 所有权限都需要先动态申请通过后,再执行文件读写操作

内容的提问来源于stack exchange,提问作者keyur thumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:15:06