在很多時候,我們需要訪問android中的資源檔案,這些資源檔案主要分為兩類,一種出於asset目錄下,稱為原生檔案,這類檔案在被打包成apk檔案時是不會進行壓縮的;另一類則是res下的檔案,這類檔案在打包成apk檔案時,會進行小記憶體優化的哦。
兩種不同型別的檔案,對應著不同的訪問模式。我們先來看看asset檔案的訪問:
android中有乙個專門的類來處理應用對asset檔案的訪問,這個類就是assetmanager。其內有乙個open()方法可以根據使用者提供的檔名,返回乙個inputstream物件供使用者使用。
我們截圖看下api中的方法:
這裡我們可以看到open方法以及其他的相應方法,對於其中有乙個引數accessmode,則指定了系統獲取資源的模式。主要值有以下幾種:
access_buffer :載入檔案到記憶體中,這種方式適合小檔案的讀取;
access_random:可以隨意的向前或者向後的讀取資料塊
access_straming:順序的讀取內容
access_unknown:當沒有明確指定時,使用預設模式
這裡我們一定要注意,open(string filename)預設的使用access_streaming模式進行讀取!!
那麼我們如何獲得乙個assetmanager物件呢,在activity中我們可以通過以下的**獲取:
//工程根目錄下的assets資料夾中存放,比如assets/test.xml 這樣我們使用下面的** assetmanager am = this.getresources().getasset(); //或者assetmanager am = this.getassets(); inputstream is = am.open(test.xml);
如何訪問res目錄下的檔案呢?
我們在activity中可以通過如下方法進行訪問:
//res/raw目錄下存放,比如test.xml乙個二進位制檔案,我們可以讀取可以直接 inputstream is=context.getresources().openrawresource(r.raw.test);
api中是這樣描述的:
最後,我們一定要注意一下三點:
存放在res/raw下的檔案,會相應的生成id,而在assets下的檔案,不會生成id;
asset和res下的檔案都是只能讀不能寫的;
在assertmanager中不能處理單個超過 1mb的檔案,不然會報異常,而第二種raw沒這個限制。
Android 工程內嵌資源檔案的兩種方法
方法一 res raw目錄下存放,比如cwj.dat乙個二進位制檔案,我們可以讀取可以直接 複製 如下 inputstream is context.getresources openrawresource r.raw.cwj 方法二 工程根目錄下的assets資料夾中存放,比如assets cwj...
android讀取資源檔案的方法
方法一 把目標檔案放入resources檔案中,以通過讀取r的資源檔案來獲取,具體方式如下 1 在res下新建raw檔案,將帶讀取檔案新增到raw檔案目錄下。2 新增如下 如果要使用檔名獲取檔案資料 首先獲取資源id然後再通過id獲取輸入流 string filename filename stri...
解決android引用依賴工程資源問題
作為乙個懶惰的程式設計師,總希望把以前寫過的東西,打個包留下來,以後用的時候就可以直接用了,不需要複製貼上,複製貼上.android開發一直有個問題困擾著我,就是我在依賴工程中新增的資源檔案,在主工程裡引用,編譯器也不會報錯,但是只要一執行,悲劇是肯定的。一直以來只好把,依賴工程的資源一次又一次的複...