Я хочу проверить, существует ли файл или нет в папке /assets/. Как я могу это сделать? Пожалуйста, помогите.
Как проверить ресурс Android Asset?
Ответ 1
Вы должны выполнить свои собственные проверки. Как я знаю, для этой работы нет способа.
Ответ 2
Я добавил вспомогательный метод в один из моих классов приложений. Я предполагаю, что
- список активов не изменяется во время работы приложения.
-
List<String>
не является памятью (только 78 объектов в моем приложении). - проверка существует() в списке быстрее, чем попытка открыть файл и обработать исключение (я на самом деле не профилировал это).
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); }
Ответ 3
Вы также можете просто попытаться открыть поток, если он не удался, файл не существует, и если он не завершился, файл должен быть там:
/**
* 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;
}
Ответ 4
Вы можете использовать Resources.openRawResourceFd(int resId)
http://developer.android.com/reference/android/content/res/Resources.html#openRawResourceFd%28int%29