Как мне включить этот код ниже в мои текущие существующие коды? - PullRequest
0 голосов
/ 01 мая 2011

У меня была задача выделить только 1 ГБ места для хранения моих видео в определенном каталоге файлов, где он будет автоматически удалять самый старый видеофайл в этом каталоге, когда он достигнет / достигнет 1 ГБ?

И в конце концов я нашел этот код, но у меня осталась проблема с тем, как включить эти примеры кода 1/2 в мой текущий существующий файл mainActivity.java из-за различий в именах, таких как «dirlist, tempFile», по сравнению с другими примерами 1/2 дается для выполнения задачи проверки и удаления размера.

Извините, я новичок в android / java, поэтому я не знаю, какие "поля" нужно изменить, чтобы удовлетворить мои текущие потребности в кодировании? Может кто-нибудь помочь с тем, как я собираюсь собрать этот набор кодов в единый набор кода, который выполняет вышеупомянутые функции ??

Мой текущий существующий mainActivity.java

File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");

if(!(dirlist.exists()))
    dirlist.mkdir();

File TempFile = new File(Environment.getExternalStorageDirectory() 
                    + "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());

(Пример 1) код для суммирования размера файла каталога в данной папке ..

private static long dirSize(File dir) {
    long result = 0;

    Stack<File> dirlist= new Stack<File>();
    dirlist.clear();

    dirlist.push(dir);

    while(!dirlist.isEmpty())
    {
        File dirCurrent = dirlist.pop();

        File[] fileList = dirCurrent.listFiles();
        for (int i = 0; i < fileList.length; i++) {

            if(fileList[i].isDirectory())
                dirlist.push(fileList[i]);
            else
                result += fileList[i].length();
        }
    }

    return result;
}

(Пример 2) набор кода для получения всех файлов в массиве и сортировки их в зависимости от даты их изменения / создания. Тогда первый файл в вашем массиве - ваш самый старый файл и удалите его.

//   no idea what are the parameters i should enter 
//   here for my case in mainActivity?? 
File directory = new File((**String for absolute path to directory**);
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>() { 
        @Override
        public int compare(File f1, File f2) 
        {       
            return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());        
        }});

file[0].delete();

1 Ответ

1 голос
/ 01 мая 2011

Это ссылка на ваш предыдущий вопрос: Как поместить максимальный объем хранилища каталогов в SD? . В будущем вам следует продолжать обсуждение одной и той же темы в одном и том же вопросе, а не создавать 2 новых идентичных вопроса.

Допустим, в вашем классе Activity вы определили следующие 2 метода:

private void deleteOldestFile(File directory)
{
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>() { 
    @Override
    public int compare(File f1, File f2) 
    {       
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());        
    }});

files[0].delete();
 }

private static long dirSize(File dir) {
long result = 0;
File[] fileList = dir.listFiles();

for(int i = 0; i < fileList.length; i++) {

    if(fileList[i].isDirectory()) {
        result += dirSize(fileList [i]);
    } else {
        // Sum the file size in bytes
        result += fileList[i].length();
    }
 }
return result; 
}

Теперь вы можете сделать это с помощью своего кода:

File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");

if(!(dirlist.exists()))
dirlist.mkdir();

Long directorySize = dirSize(dirlist);

 if (directorySize > 1073741824) // this is 1GB in bytes
 {
    deleteOldestFile(dirlist); 
 }

File TempFile = new File(Environment.getExternalStorageDirectory() 
                + "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());

Таким образом, перед настройкой выходного файла в этой папке он проверяет, является ли папка> 1 ГБ, и, если это так, сначала удаляет самый старый файл.

Если честно, удаление самого старого файла может не обязательно сделать размер каталога <1 ГБ, поэтому я бы использовал цикл while, чтобы убедиться, что он <1 ГБ, вот так: </p>

while (directorySize > 1073741824)
{
  deleteOldestFile(dirlist);
  direcotrySize = dirSize(dirlist);
}
...