天天看點

Android 讀取工程内資源檔案的兩種方法

前言

         歡迎大家我分享和推薦好用的代碼段~~

聲明

         歡迎轉載,但請保留文章原始出處:

         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,則指定了系統擷取資源的模式。主要值有以下幾種:

Android 讀取工程内資源檔案的兩種方法

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沒這個限制。