удалить неиспользуемые файлы из хранилища

Я сохранил некоторые изображения в определенной папке моего хранилища. У меня есть примеры 1.png, 2.png и т. Д. Я знаю, как я могу получить имя всех файлов. Это источник

  private void getAllElemetsFromStorage() {
    String root_sd = Environment.getExternalStorageDirectory().toString();
    File file = new File(root_sd + "/myfolder");
    for (File f : file.listFiles()) {
        if (f.isFile()) {
            String name = f.getName();
            Log.e("file names", name + "");
        }}
}

Этот код работает правильно, но у меня есть одна проблема. У меня есть json, и в моем json у меня есть имя файла. Как я могу получить все имена файлов, которых нет в моем json, и это мой каталог, и как я могу удалить все эти файлы? Моя цель - сохранить только файлы, ведьмы находятся в моих jsons, и я хочу удалить все неиспользуемые файлы из моего каталога. Как я могу решить свою проблему? Благодарность


person BekaKK    schedule 13.06.2017    source источник


Ответы (1)


Внутри вашего оператора if, после того как вы получите имя файла, прокрутите json и проверьте, есть ли он там или нет. Если нет, удалите его.

Ваш уже существующий цикл for будет делать это для каждого файла в каталоге, удаляя его, если имя не существует в json.

Ниже приведен пример. В зависимости от вашего Json вам нужно создать список или выполнить цикл другим способом.

private void getAllElemetsFromStorage() {
  String root_sd = Environment.getExternalStorageDirectory().toString();
  File file = new File(root_sd + "/myfolder");
  ArrayList<String> jsonFileNames = // Get list of file names from json

  for (File f : file.listFiles()) {
    if (f.isFile()) {
        String name = f.getName();      

        // If not found in json. Delete file
        if(!jsonFileNames.contains(name))
           f.delete();
    }
  }
}

Примечание: этот код не тестировался, поэтому могут быть опечатки. Но это должно дать вам идею.

person IAmGroot    schedule 13.06.2017
comment
Спасибо, мужики. Может быть, я решил сам, если (! jsonFileNames.contains (имя)) { Log.e (удалить этот файл, имя +); }.Что вы думаете? Это правильно @Doomsknight - person BekaKK; 13.06.2017
comment
@Баджио Да, намного лучше. Я не мог точно вспомнить, был ли метод contains в списке массивов. Я изменил свой ответ, чтобы отразить - person IAmGroot; 13.06.2017
comment
Я пытаюсь удалить файл, но f.delete() работает неправильно. Он очистил весь мой каталог? @Doomsknight - person BekaKK; 14.06.2017
comment
@Баджо. Зарегистрируйте, какие из них вы вызываете для удаления. Может быть, он вызывается для каждого файла? если да, проверьте содержимое jsonfilenames и name. Убедитесь, что расширение существует/не существует в обоих источниках. Так как он может считать его не найденным, если есть несоответствие. удаление расширения - person IAmGroot; 14.06.2017