這個(gè)問(wèn)題很多人還可能真的不清楚,包括我也之前只知道原封不動(dòng)保存到APK中這個(gè)作用务漩。
讓我們系統(tǒng)的總結(jié)一下拄衰。
res/raw和assets的相同點(diǎn):
兩者目錄下的文件在打包后會(huì)原封不動(dòng)的保存在apk包中,不會(huì)被編譯成二進(jìn)制饵骨。
res/raw和assets的不同點(diǎn):
res/raw中的文件會(huì)被映射到R.java文件中翘悉,訪問(wèn)的時(shí)候直接使用資源ID即R.id.filename;assets文件夾下的文件不會(huì)被映射到R.java中居触,訪問(wèn)的時(shí)候需要AssetManager類妖混。
res/raw不可以有目錄結(jié)構(gòu),而assets則可以有目錄結(jié)構(gòu)饼煞,也就是assets目錄下可以再建立文件夾
- 讀取文件資源:
讀取res/raw下的文件資源源葫,通過(guò)以下方式獲取輸入流來(lái)進(jìn)行寫(xiě)操作
InputStream is =getResources().openRawResource(R.id.filename);
讀取assets下的文件資源,通過(guò)以下方式獲取輸入流來(lái)進(jìn)行寫(xiě)操作
/**
* 從assets中讀取圖片
*/
private Bitmap getImageFromAssetsFile(String fileName)
{
Bitmap image = null;
AssetManager am = getResources().getAssets();
try
{
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return image;
}
注意1:Google的Android系統(tǒng)處理Assert有個(gè)bug砖瞧,在AssertManager中不能處理單個(gè)超過(guò)1MB的文件息堂,不然會(huì)報(bào)異常,raw沒(méi)這個(gè)限制可以放個(gè)4MB的Mp3文件沒(méi)問(wèn)題块促。
注意2:assets 文件夾是存放不進(jìn)行編譯加工的原生文件荣堰,即該文件夾里面的文件不會(huì)像 xml, java 文件被預(yù)編譯竭翠,可以存放一些圖片振坚,html,js, css 等文件斋扰。
謝謝大家閱讀渡八,如有幫助,來(lái)個(gè)喜歡或者關(guān)注吧传货!
本文作者:Anderson/Jerey_Jobs
博客地址 : 夏敏的博客/Anderson大碼渣/Jerey_Jobs
簡(jiǎn)書(shū)地址 : Anderson大碼渣
CSDN地址 : Jerey_Jobs的專欄
github地址 : Jerey_Jobs