如何在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
相关产品推荐
相关产品推荐

