首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 刪除目錄下所有文件:遞歸刪除與倒序遍歷避免 ConcurrentModification

     編輯:程式設計綜合問答

完整工具方法

public static boolean deleteDir(File dir) {
    if (dir == null || !dir.exists()) return true;
    if (dir.isFile()) return dir.delete();

    File[] files = dir.listFiles();
    if (files != null) {
        // 倒序刪除:先刪子文件/子目錄,最後刪自身
        for (int i = files.length - 1; i >= 0; i--) {
            deleteDir(files[i]);
        }
    }
    return dir.delete(); // 空目錄才能刪除成功
}

調用示例

File videoDir = new File(Environment.getExternalStorageDirectory(), "MyApp/Videos");
deleteDir(videoDir);

關鍵點

  • 倒序遍歷:避免刪除前項導致數組索引偏移(雖然 `listFiles()` 返回快照,但習慣更安全)。
  • 遞歸刪除子目錄:`File.delete()` 僅能刪除空目錄。
  • 權限:Android 10+ 需 `MANAGE_EXTERNAL_STORAGE` 或使用 `MediaStore` API 刪除媒體文件。

現代替代:Kotlin 協程 + File 扩展

suspend fun File.deleteRecursively(): Boolean = withContext(Dispatchers.IO) {
    if (!exists()) return@withContext true
    if (isFile) return@withContext delete()
    listFiles()?.forEach { it.deleteRecursively() }
    delete()
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved