Проверить наличие файла в папке активов андроидов?
Мое приложение имеет .txt файлы в подкаталогах в папке с ресурсами. Он читает эти .txt файлы и помещает их в текстовое представление. Он работает отлично и без проблем.
Должен ли я беспокоиться о том, что файлы в папке с ресурсами удаляются пользователем или отсутствуют. Если это когда-либо случится, мое приложение получит ошибку, потому что файл не будет там, когда он попытается прочитать его в потоке.
Есть ли необходимость в проверке наличия файла активов до того, как я его прочитаю или менеджер активов позаботится обо всем этом? Я также задавался вопросом, есть ли шанс, что пользователь мог бы или мог удалить и файл активов.
Как я уже сказал, все отлично работает без меня, вставляя код для проверки существования файла. Я просто задавался вопросом, используют ли люди инструкцию .exists() каждый раз, когда они читают в потоке из активов.
Ответы
Ответ 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, чтобы быть в безопасности.