前言
歡迎大家我分享和推薦好用的代碼段~~
聲明
歡迎轉載,但請保留文章原始出處:
CSDN:
雨季o莫憂離:
正文
總結:
asset目錄下檔案:
稱為原生檔案,這類檔案在被打包成apk檔案時是不會進行壓縮的,不會自動生成R檔案的ID
通路:
擷取路徑:
//工程根目錄下的assets檔案夾中存放,比如assets/test.xml 這樣我們使用下面的代碼
AssetManager am = this.getResources().getAsset();
//或者AssetManager am = this.getAssets();
InputStream is = am.open(test.xml);
res目錄下的檔案:
檔案會被映射到R.java檔案中
//res/raw目錄下存放,比如test.xml一個二進制檔案,我們可以讀取可以直接
InputStream is=context.getResources().openRawResource(R.raw.test);
res/raw和assets的相同點:
1.兩者目錄下的檔案在打包後會原封不動的儲存在apk包中,不會被編譯成二進制, 可以把資料庫檔案放這裡。
.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立檔案夾
-----------------------------------------------------------------------------------
在很多時候,我們需要通路android中的資源檔案,這些資源檔案主要分為兩類,一種出于asset目錄下,稱為原生檔案,這類檔案在被打包成apk檔案時是不會進行壓縮的;另一類則是res下的檔案,這類檔案在打包成apk檔案時,會進行小記憶體優化的哦。
兩種不同類型的檔案,對應着不同的通路模式。我們先來看看asset檔案的通路:
android中有一個專門的類來處理應用對asset檔案的通路,這個類就是AssetManager。其内有一個open()方法可以根據使用者提供的檔案名,傳回一個InputStream對象供使用者使用。
這裡我們可以看到open方法以及其他的相應方法,對于其中有一個參數accessMode,則指定了系統擷取資源的模式。主要值有以下幾種:
ACCESS_BUFFER :加載檔案到記憶體中,這種方式适合小檔案的讀取;
ACCESS_RANDOM:可以随意的向前或者向後的讀取資料塊
ACCESS_STRAMING:順序的讀取内容
ACCESS_UNKNOWN:當沒有明确指定時,使用預設模式
這裡我們一定要注意,open(String fileName)預設的使用ACCESS_STREAMING模式進行讀取!!
那麼我們如何獲得一個AssetManager對象呢,在activity中我們可以通過以下的代碼擷取:
[java]
InputStream is = am.open(test.xml);
如何通路res目錄下的檔案呢?
我們在activity中可以通過如下方法進行通路:
InputStream is=context.getResources().openRawResource(R.raw.test);
最後,我們一定要注意一下三點:
存放在res/raw下的檔案,會相應的生成ID,而在assets下的檔案,不會生成ID;
asset和res下的檔案都是隻能讀不能寫的;
在AssertManager中不能處理單個超過 1MB的檔案,不然會報異常,而第二種raw沒這個限制。