2011-08-17 3 views
4

Ce que j'essaie d'accomplir est le suivant: Supposons que j'ai une fonction qui écrit une image dans un répertoire de fichiers (SD ou cache interne)). Après avoir écrit le fichier, j'effectue une vérification pour voir si mon répertoire d'images est dans une certaine taille totale de fichier (en ce moment, j'utilise ce function pour calculer récursivement la taille du fichier du répertoire). Si le fichier que je viens d'ajouter rend ce répertoire trop grand, alors je veux continuer à supprimer les anciens fichiers jusqu'à ce que nous soyons juste en dessous de cette taille de fichier maximale. Je pensais d'abord trier les membres du répertoire de fichiers les plus anciens en premier (via comparateur, ordre croissant en utilisant example), puis convertir le tableau en ArrayList pour obtenir son Iterator, alors que la taille de notre répertoire est toujours au dessus de taille maximale du fichier, et j'ai encore des fichiers à parcourir, je supprime les fichiers plus anciens jusqu'à ce que je sors de cette boucle tout. Y a-t-il un moyen plus efficace d'accomplir cela?Supprimer le (s) fichier (s) le plus ancien (s) dans un répertoire jusqu'à ce qu'il soit sous une certaine taille

Répondre

1

Votre goulot d'étranglement sera sans doute lié aux opérations du système de fichiers (lire le contenu du répertoire et supprimer les fichiers), pas à la manipulation en mémoire, vous ne devriez donc pas trop vous soucier de l'efficacité de ce dernier. tant que vous ne faites pas quelque chose de grossièrement inefficace.

L'algorithme approximatif que vous décrivez fonctionne correctement. Vous pouvez éviter la conversion ArrayList en faisant simplement quelque chose comme:

for (Pair pair : pairs) { 
    if (totalSize <= maxSize) { 
     break; 
    } 

    totalSize -= pair.f.length(); 
    pair.f.delete(); 
} 
+0

Alors oui, j'ai ajouté cet extrait après le tri. J'espère que ça fonctionnera quand je l'essayerai aujourd'hui. –

Questions connexes