Я хочу проверить, существует ли файл в папке /assets/. Как я мог это сделать? Пожалуйста помоги.
Как проверить ресурс Android Asset?
Ответы (4)
Вы должны выполнить свои собственные проверки. Насколько я знаю, для этой работы нет метода.
person
Chromium
schedule
13.12.2010
Понятно, что для этого может не быть метода, но если вы не можете предоставить альтернативу, то это не должно было быть ответом.
- person Gowiem; 06.06.2012
Я добавил вспомогательный метод в один из моих классов приложений. Я предполагаю, что;
- список активов не меняется во время работы приложения.
List<String>
не пожирает память (всего 78 ресурсов в моем приложении).- проверка exists() в списке быстрее, чем попытка открыть файл и обработать исключение (на самом деле я не профилировал это).
AssetManager am; List<String> mapList; /** * Checks if an asset exists. * * @param assetName * @return boolean - true if there is an asset with that name. */ public boolean checkIfInAssets(String assetName) { if (mapList == null) { am = getAssets(); try { mapList = Arrays.asList(am.list("")); } catch (IOException e) { } } return mapList.contains(assetName); }
person
geoffc
schedule
14.08.2011
List.contains()
уже возвращает логическое значение, нет необходимости в троичном выражении в конце функции.
- person Vytautas Šaltenis; 11.08.2012
Вы также можете просто попытаться открыть поток, если он не работает, файла нет, и если он не терпит неудачу, файл должен быть там:
/**
* Check if an asset exists. This will fail if the asset has a size < 1 byte.
* @param context
* @param path
* @return TRUE if the asset exists and FALSE otherwise
*/
public static boolean assetExists(Context context, String path) {
boolean bAssetOk = false;
try {
InputStream stream = context.getAssets().open(ASSET_BASE_PATH + path);
stream.close();
bAssetOk = true;
} catch (FileNotFoundException e) {
Log.w("IOUtilities", "assetExists failed: "+e.toString());
} catch (IOException e) {
Log.w("IOUtilities", "assetExists failed: "+e.toString());
}
return bAssetOk;
}
person
Moss
schedule
09.11.2011
Это решение намного быстрее, чем получение всей папки актива в виде списка и проверка содержания. (Я измерил ~ 50 мс против ~ 800 мс на моем устройстве)
- person azendh; 01.08.2014
Вы можете использовать Resources.openRawResourceFd(int resId)
http://developer.android.com/reference/android/content/res/Resources.html#openRawResourceFd%28int%29
person
Hrk
schedule
11.11.2010
Это не дает никакого способа проверить существование файла. Спасибо, в любом случае.
- person Mudassir; 11.11.2010
Если файл не существует, будет выдано исключение NotFoundException. Вы можете поймать его и делать то, что вы хотите.
- person Hrk; 11.11.2010