Подтвердить что ты не робот

Проверить наличие файла в папке активов андроидов?

Мое приложение имеет .txt файлы в подкаталогах в папке с ресурсами. Он читает эти .txt файлы и помещает их в текстовое представление. Он работает отлично и без проблем.

Должен ли я беспокоиться о том, что файлы в папке с ресурсами удаляются пользователем или отсутствуют. Если это когда-либо случится, мое приложение получит ошибку, потому что файл не будет там, когда он попытается прочитать его в потоке.

Есть ли необходимость в проверке наличия файла активов до того, как я его прочитаю или менеджер активов позаботится обо всем этом? Я также задавался вопросом, есть ли шанс, что пользователь мог бы или мог удалить и файл активов.

Как я уже сказал, все отлично работает без меня, вставляя код для проверки существования файла. Я просто задавался вопросом, используют ли люди инструкцию .exists() каждый раз, когда они читают в потоке из активов.

4b9b3361

Ответ 1

Да и №

Обычный пользователь не сможет удалить их, но пользователь на корневом телефоне, который не знает, что они делают... что в другой ситуации.

Если вы спросите меня, дополнительный код не нужен. Также, если вы попытаетесь открыть файл, который не существует, вы получите какое-то исключение, возникшее в какой-то момент, поймать его и отобразить диалог, если вы действительно этого хотите.

Ответ 2

Вы можете быть обеспокоены тем, что файл был удален, и apk подал в отставку

Вы можете проверить, используя:

Arrays.asList(getResources().getAssets().list("")).contains("myFile")

Ответ 3

если вы действительно хотите проверить наличие файла:

AssetManager mg = getResources().getAssets();
InputStream is = null;
try {
  is = mg.open(pathInAssets);
  //File exists so do something with it
} catch (IOException ex) {
  //file does not exist
} finally {
  if (is != null) {
    is.close();
  }
}

Если ваш файл находится в assets/folder/file.ext, тогда pathInAssets будет "folder/file.ext"

Ответ 4

В идеале после создания apk никто не может удалить из него какие-либо активы, но если кто-то декомпилирует его и перекомпилирует, чем это возможно.

Хотя для других сценариев также, когда актив отсутствует в apk во время выполнения, мы можем проверить наличие актива.

В нашем приложении у нас есть условие для создания приложения с использованием gradle, ant и eclipse, и для каждого механизма сборки некоторые из наших файлов активов объединены в apk, а некоторые нет, поэтому для определения того, файл присутствует в текущей сборке apk во время выполнения,

делаем это следующим образом:

private boolean isAssetExists(String pathInAssetsDir){
    AssetManager assetManager = AppContext.get().getResources().getAssets();
    InputStream inputStream = null;
    try {
        inputStream = assetManager.open(pathInAssetsDir);
        if(null != inputStream ) {
           return true;
        }
    }  catch(IOException e) {
        e.printStackTrace();
    } finally {
        try {
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }  
    return false;
}

Ответ 5

Думаю, с тобой все в порядке. Из-за того, что в моем телефоне есть корень, я не вижу никакого способа удалить оценки без удаления приложения, поскольку все это, кажется, завернуто в файл .apk. Вы можете это сделать, но я думаю, вам нужно укорениться или использовать adb.

В любом случае, я бы лично использовал любое чтение/запись с помощью блока try/catch, чтобы быть в безопасности.