Android内部存储目录删除问题:判断存在性及优化方案
问题1:不创建目录的前提下判断是否存在
getDir()方法的特性就是当目标目录不存在时自动创建,要避免这种行为,直接通过File类构造目标目录实例即可:
// 基于应用内部存储的filesDir构造目录实例,不会自动创建 val directory = File(filesDir, "myDirName") if (directory.exists() && directory.isDirectory) { // 目录存在时的逻辑 }
这里filesDir是Context的属性,指向应用内部存储的files目录,和getDir()创建的目录路径完全一致,但通过File构造不会触发自动创建操作。
问题2:更可靠的目录删除方法
原生的directory.delete()只能删除空目录,如果目录下有文件或子目录,删除会直接失败。需要递归遍历删除所有内容后,再删除目录本身,可通过扩展函数实现:
fun File.safeDelete(): Boolean { if (this.isDirectory) { // 遍历目录下所有文件和子目录,递归删除 this.listFiles()?.forEach { child -> child.safeDelete() } } // 删除当前文件/空目录 return this.delete() }
使用方式:
val directory = File(filesDir, "myDirName") if (directory.exists() && directory.isDirectory) { val deleteSuccess = directory.safeDelete() // 可根据deleteSuccess判断删除结果 }
该方法会先清空目录内所有内容,再删除目录本身,确保删除操作的完整性。
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

