Я использую эту рекурсивную функцию, чтобы сделать работу:
public static void deleteDirAndContents(@NonNull File mFile){
if (mFile.isDirectory() && mFile.listFiles() != null && mFile.listFiles().length > 0x0) {
for (File file : mFile.listFiles()) {
deleteDirAndContents(file);
}
} else {
mFile.delete();
}
}
Функция проверяет, является ли это каталогом или файлом.
Если это каталог, он проверяет, есть ли у него дочерние файлы, если у него есть дочерние файлы, он снова позвонит, передав дочерние файлы и повторив.
Если это файл, то удалите его.
(Не используйте эту функцию для очистки кеша приложения, передавая каталог кеша, потому что он также удалит каталог кеша, так что приложение будет аварийно завершать работу ... Если вы хотите очистить кеш, используйте эту функцию, которая не удалит Дир, вы переходите к нему:
public static void deleteDirContents(@NonNull File mFile){
if (mFile.isDirectory() && mFile.listFiles() != null && mFile.listFiles().length > 0x0) {
for (File file : mFile.listFiles()) {
deleteDirAndContents(file);
}
}
}
или вы можете проверить, является ли это каталогом кеша, используя:
if (!mFile.getAbsolutePath().equals(context.getCacheDir().getAbsolutePath())) {
mFile.delete();
}
Пример кода для очистки кэша приложения:
public static void clearAppCache(Context context){
try {
File cache = context.getCacheDir();
FilesUtils.deleteDirContents(cache);
} catch (Exception e){
MyLogger.onException(TAG, e);
}
}
До свидания, хорошего дня и кодирования: D