立一個(gè)Android項(xiàng)目后會(huì)產(chǎn)生assets與res的兩個(gè)文件夾,理論上他們都是存放資源的文件夾橄仍,那么他們到底有什么區(qū)別呢沈跨?
1.assets:不會(huì)在R.java文件下生成相應(yīng)的標(biāo)記肃续,存放到這里的資源在運(yùn)行打包的時(shí)候都會(huì)打入程序安裝包中
2.res:會(huì)在R.java文件下生成標(biāo)記,這里的資源會(huì)在運(yùn)行打包操作的時(shí)候判斷哪些被使用到了估蹄,沒有被使用到的文件資源是不會(huì)打包到安裝包中的。
在res文件夾下其實(shí)還可以定義一下目錄:
res/anim:這里存放的是動(dòng)畫資源沫换。
res/xml:可以在Activity中使用getResource().getXML()讀取這里的資源文件
res/raw:該目錄下的文件可以直接復(fù)制到設(shè)備上臭蚁,編譯軟件時(shí),這里的數(shù)據(jù)不需要編譯讯赏,直接加入到程序安裝包中垮兑,使用方法是getResource().OpenRawResources(ID),其中參數(shù)ID的形式是R.raw.XXX.
*res/raw和assets的相同點(diǎn):
1.兩者目錄下的文件在打包后會(huì)原封不動(dòng)的保存在apk包中,不會(huì)被編譯成二進(jìn)制漱挎。
*res/raw和assets的不同點(diǎn):
1.res/raw中的文件會(huì)被映射到R.java文件中系枪,訪問的時(shí)候直接使用資源ID即R.id.filename;assets文件夾下的文件不會(huì)被映射到R.java中磕谅,訪問的時(shí)候需要AssetManager類私爷。
2.res/raw不可以有目錄結(jié)構(gòu),而assets則可以有目錄結(jié)構(gòu)膊夹,也就是assets目錄下可以再建立文件夾
*讀取文件資源:
1.讀取res/raw下的文件資源衬浑,通過以下方式獲取輸入流來進(jìn)行寫操作
· InputStream is =getResources().openRawResource(R.id.filename);
2.讀取assets下的文件資源,通過以下方式獲取輸入流來進(jìn)行寫操作
· AssetManager am = null;
· am = getAssets();
· InputStream is = am.open("filename");
注意1:Google的Android系統(tǒng)處理Assert有個(gè)bug放刨,在AssertManager中不能處理單個(gè)超過1MB的文件工秩,不然會(huì)報(bào)異常,raw沒這個(gè)限制可以放個(gè)4MB的Mp3文件沒問題进统。
注意2:assets 文件夾是存放不進(jìn)行編譯加工的原生文件拓诸,即該文件夾里面的文件不會(huì)像 xml, java 文件被預(yù)編譯麻昼,可以存放一些圖片奠支,html,js, css 等文件抚芦。