2010-11-11 14 views

उत्तर

4

आप अपनी खुद की जांच करने के लिए किया है। जैसा कि मुझे पता है, इस नौकरी के लिए कोई विधि नहीं है।

+0

मैं भी ऐसा सोचता हूं। धन्यवाद। – Mudassir

+3

समझने योग्य है कि इसके लिए कोई विधि नहीं हो सकती है, लेकिन यदि आप कोई विकल्प नहीं दे सकते हैं तो यह कोई जवाब नहीं होना चाहिए था। – Gowiem

4

आप Resources.openRawResourceFd (पूर्णांक Resid) का उपयोग कर सकते

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

+0

यह फ़ाइल के अस्तित्व की जांच करने के लिए कोई विधि नहीं देता है। फिर भी धन्यवाद। – Mudassir

+1

यदि फ़ाइल मौजूद नहीं है, तो यह NotFoundException फेंक देगा। आप इसे पकड़ सकते हैं और जो चाहते हैं वह कर सकते हैं। – Hrk

13

मैंने अपने आवेदन कक्षाओं में से एक को एक सहायक विधि जोड़ा। मुझे लगता है कि;

  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); 
} 
+6

'List.contains() 'पहले से ही बूलियन लौटाता है, फ़ंक्शन के अंत में टर्नरी अभिव्यक्ति की आवश्यकता नहीं है। –

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; 
} 
+0

यह समाधान अधिक तेज़ है, फिर पूरे परिसंपत्ति के फ़ोल्डर को सूची के रूप में प्राप्त करना, और रोकथाम की जांच करना। (मैंने अपने डिवाइस पर ~ 50ms बनाम ~ 800ms मापा) – azendh

संबंधित मुद्दे