Удалите самые старые файлы в каталоге, пока он не достигнет определенного размера - PullRequest
4 голосов
/ 18 августа 2011

Я пытаюсь выполнить следующее: предположим, у меня есть функция, которая записывает изображение в каталог File (SD или внутренний кэш).После записи файла я выполняю проверку, чтобы определить, находится ли мой каталог изображений в пределах определенного общего размера файла (сейчас я использую эту функцию для рекурсивного вычисления размера файла каталога).Если файл, который я только что добавил, делает этот каталог слишком большим, то я хочу продолжать удалять старые файлы, пока у нас не будет чуть меньше этого максимального размера.

Я думал о первой сортировке членов каталога File.сначала из самого старого (через компаратор, в порядке возрастания, используя этот пример ), затем преобразуйте массив в ArrayList, чтобы получить его итератор, затем, пока наш размер файла каталога все еще превышает максимальный размер файла, и у меня все еще естьфайлы, для итерации, я удаляю старые файлы, пока не выйду из цикла while.Есть ли более эффективный способ сделать это?

1 Ответ

1 голос
/ 18 августа 2011

Скорее всего, вашим узким местом будут операции с файловой системой (т. Е. Чтение содержимого каталога и удаление файлов), а не манипуляции в памяти, поэтому вам, вероятно, не стоит слишком беспокоиться об эффективности последнего,Пока вы не делаете что-то крайне неэффективное.

Грубый алгоритм, который вы описываете, звучит хорошо.Вы можете избежать преобразования ArrayList, просто выполнив что-то вроде:

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

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