Sto usando questa funzione ricorsiva per fare il lavoro:
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();
}
}
La funzione controlla se si tratta di una directory o di un file.
Se è una directory controlla se ha file figlio, se ha file figlio si chiamerà di nuovo passando i bambini e ripetendo.
Se è un file, lo elimina.
(Non utilizzare questa funzione per cancellare la cache dell'app passando la directory cache perché eliminerà anche la directory cache in modo che l'app si blocchi in modo anomalo ... Se si desidera cancellare la cache, utilizzare questa funzione che non eliminerà il dir ci passi:
public static void deleteDirContents(@NonNull File mFile){
if (mFile.isDirectory() && mFile.listFiles() != null && mFile.listFiles().length > 0x0) {
for (File file : mFile.listFiles()) {
deleteDirAndContents(file);
}
}
}
oppure puoi verificare se si tratta della directory cache usando:
if (!mFile.getAbsolutePath().equals(context.getCacheDir().getAbsolutePath())) {
mFile.delete();
}
Codice di esempio per cancellare la cache dell'app:
public static void clearAppCache(Context context){
try {
File cache = context.getCacheDir();
FilesUtils.deleteDirContents(cache);
} catch (Exception e){
MyLogger.onException(TAG, e);
}
}
Ciao, buona giornata e programmazione: D