10

/Assets/フォルダにファイルが存在するかどうかを確認したい。どうすればいいですか?助けてください。

4

4 に答える 4

13

アプリケーションクラスの1つにヘルパーメソッドを追加しました。私はそれを仮定しています。

  1. アプリの実行中、アセットのリストは変更されません。
  2. これList<String>はメモリホッグではありません(私のアプリでは78個のアセットのみ)。
  3. リスト上の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);
}
于 2011-08-14T04:25:12.167 に答える
9

ストリームを開こうとすることもできます。失敗した場合はファイルが存在せず、失敗しなかった場合はファイルが存在するはずです。

/**
 * 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;
}
于 2011-11-09T19:10:47.890 に答える
4

Resources.openRawResourceFd(int resId)を使用できます

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

于 2010-11-11T10:25:08.627 に答える
3

独自のチェックを実行する必要があります。私が知っているように、この仕事のための方法はありません。

于 2010-12-13T08:44:46.007 に答える