Android中的asserts和res/raw資源目錄*


1、assets目錄

assets目錄下稱為原生文件,無法通過R資源清單類訪問,這類文件在被打包成apk文件時是不會進行壓縮的;

(1)使用方法

AssetManager assets = this.getResources().getAssets(); ((TextView)findViewById(R.id.txAssets)).setText( readStream(assets.open("data.txt")) );

在context上下文中,調用getAssets返回一個AssetManager對象,然后使用open方法就可以訪問需要的資源了,這里open方法是以assets目錄為根的。

assets目錄更像一個附錄類型的目錄,Android不會為這個目錄中的文件生成ID並保存在R類當中,因此它與Android中的一些類和方法兼容度更低。同時,由於你需要一個字符串路徑來獲取這個目錄下的文件描述符,訪問的速度會更慢。但是把一些文件放在這個目錄下會使一些操作更加方便,比方說拷貝一個數據庫文件到系統內存中。要注意的是,你無法在Android XML文件中引用到assets目錄下的文件,只能通過AssetManager來訪問這些文件。數據庫文件和游戲數據等放在這個目錄下是比較合適的。這個目錄中的文件也不會被編譯成二進制形式,可以自建目錄。

2、res目錄

res目錄下這類文件在打包成apk文件時,可通過R資源清單類訪問,會進行小內存優化。

res/raw目錄這里的文件會原封不動的存儲到設備上,不會被編譯為二進制形式,訪問的方式通過R類。由於raw是Resources (res)的子目錄,Android會自動的為這目錄中的所有資源文件生成一個ID,這個ID會被存儲在R類當中,作為一個文件的引用。這意味着這個資源文件可以很容易的被Android的類和方法訪問到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是訪問一個文件最快捷的方式。MP3和Ogg文件放在這個目錄下是比較合適的。不可以有目錄結構。

(1)使用方法

InputStream is =getResources().openRawResource(R.id.filename);

try { ByteArrayOutputStream bo = new ByteArrayOutputStream(); int i = is.read(); while(i != -1) { bo.write(i); i = is.read(); } return bo.toString(); } catch (IOException e) { return ""; }

通過openRawResource(R.id.filename);方法獲取一個指定id的輸入流.

還有一些其他文件夾:

res/anim:這里存放的是動畫資源。

res/xml:可以在Activity中使用getResource().getXML()讀取這里的資源文件,但是XML會被編譯成二機制文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM