Как проверить ресурс Android Asset? - PullRequest
10 голосов
/ 11 ноября 2010

Я хочу проверить, существует ли файл в папке / assets /.Как я мог это сделать?Пожалуйста, помогите.

Ответы [ 4 ]

13 голосов
/ 14 августа 2011

Я добавил вспомогательный метод в один из классов моего приложения.Я предполагаю, что

  1. список ресурсов не изменяется во время работы приложения.
  2. List<String> не является проблемой памяти (только 78 ресурсов вмое приложение).
  3. проверка существует () в списке быстрее, чем попытка открыть файл и обработать исключение (я на самом деле не профилировал это).
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);
}
9 голосов
/ 09 ноября 2011

Вы также можете просто попытаться открыть поток, если он не работает, файла нет и файл не должен быть там:

/**
 * 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 голосов
/ 13 декабря 2010

Вы должны выполнить свои собственные проверки. Как я знаю, для этой работы нет метода.

4 голосов
/ 11 ноября 2010

Вы можете использовать Resources.openRawResourceFd (int resId)

http://developer.android.com/reference/android/content/res/Resources.html#openRawResourceFd%28int%29

...