Android開發(fā)之資源目錄assets與res/raw的區(qū)別分析
本文實(shí)例講述了Android開發(fā)之資源目錄assets與res/raw的區(qū)別。分享給大家供大家參考,具體如下:
assets:用于存放需要打包到應(yīng)用程序的靜態(tài)文件,以便部署到設(shè)備中。與res/raw不同點(diǎn)在于,ASSETS支持任意深度的子目錄。這些文件不會(huì)生成任何資源ID,必須使用/assets開始(不包含它)的相對(duì)路徑名。
res:用于存放應(yīng)用程序的資源(如圖標(biāo)、GUI布局等),將被打包到編譯后的Java中。不支持深度子目錄
res/menu:存放基于XML的菜單描述;
res/raw:存放通用的文件, 該文件夾內(nèi)的文件將不會(huì)被編譯成二進(jìn)制文件,按原樣復(fù)制到設(shè)備上。
res/values:存放字符串、尺寸值。
res/xml: 存放通用的XML文件
三個(gè)特殊的資源目錄 /res/xml /res/raw 和 /assets
在android開發(fā)中,我們離不開資源文件的使用,從drawable到string,再到layout,這些資源都為我們的開發(fā)提供了極大的便利,不過我們平時(shí)大部分時(shí)間接觸的資源目錄一般都是下面這三個(gè)。
/res/drawable
/res/values
/res/layout
但android的資源文件并不止這些,下面就為大家介紹一下另外三個(gè)資源目錄
/res/xml
/res/raw
/assets
首先是/res/xml ,這個(gè)目錄中大家可能偶爾用到過,這里可以用來存儲(chǔ)xml格式的文件,并且和其他資源文件一樣,這里的資源是會(huì)被編譯成二進(jìn)制格式放到最終的安裝包里的, 我們也可以通過R類來訪問這里的文件,并且解析里面的內(nèi)容,例如我們?cè)谶@里存放了一個(gè)名為data.xml的文件:
<?xml version="1.0" encoding="utf-8"?> <root> <title>Hello XML!</title> </root>
隨后,我們就可以通過資源ID來訪問并解析這個(gè)文件了
XmlResourceParser xml = getResources().getXml(R.xml.data);
xml.next();
int eventType = xml.getEventType();
boolean inTitle = false;
while(eventType != XmlPullParser.END_DOCUMENT) {
//到達(dá)title節(jié)點(diǎn)時(shí)標(biāo)記一下
if(eventType == XmlPullParser.START_TAG) {
if(xml.getName().equals("title")) {
inTitle = true;
}
}
//如過到達(dá)標(biāo)記的節(jié)點(diǎn)則取出內(nèi)容
if(eventType == XmlPullParser.TEXT && inTitle) {
((TextView)findViewById(R.id.txXml)).setText(
xml.getText()
);
}
xml.next();
eventType = xml.getEventType();
}
在這里,我們用資源類的getXml方法,返回了一個(gè)xml解析器,這個(gè)解析器的工作原理和SAX方式差不多, 要注意的是,這里的xml文件,最終是會(huì)被編譯成二進(jìn)制形式的,如果大家想讓文件原樣存儲(chǔ)的話,那么就要用到下一個(gè)目錄啦,那就是/res/raw目錄
這個(gè)目錄的唯一區(qū)別就是,這里的文件會(huì)原封不動(dòng)的存儲(chǔ)到設(shè)備上,不會(huì)被編譯為二進(jìn)制形式,訪問的方式也是通過R類,下面是一個(gè)例子:
((TextView)findViewById(R.id.txRaw)).setText(
readStream(getResources().openRawResource(R.raw.rawtext))
);
private String readStream(InputStream is) {
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,返回給我們一個(gè)輸入流,這樣我們就可以任意讀取文件中的內(nèi)容了,例如上面例子中那樣,原樣輸出文本文件中的內(nèi)容。
當(dāng)然,如果你需要更高的自由度,盡量不受android平臺(tái)的約束,那么/assets這個(gè)目錄就是你的首選了。
這個(gè)目錄中的文件除了不會(huì)被編譯成二進(jìn)制形式之外,另外一點(diǎn)就是,訪問方式是通過文件名,而不是資源ID。并且還有更重要的一點(diǎn)就是,大家可以在這 里任意的建立子目錄,而/res目錄中的資源文件是不能自行建立子目錄的。如果需要這種靈活的資源存儲(chǔ)方式,那么就看看下面這個(gè)例子:
AssetManager assets = getAssets();
((TextView)findViewById(R.id.txAssets)).setText(
readStream(assets.open("data.txt"))
);
在context上下文中,調(diào)用getAssets返回一個(gè)AssetManager,然后使用open方法就可以訪問需要的資源了,這里open方法是以assets目錄為根的。所以上面這段代碼訪問的是assets目錄中名為data.txt的資源文件。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android操作存放在assets文件夾下SQLite數(shù)據(jù)庫(kù)的方法
- Android獲取assets文件夾中的數(shù)據(jù)并寫入SD卡示例
- Android讀取assets目錄下的所有圖片并顯示的方法
- 讀寫Android中assets目錄下的文件的方法詳解
- android讀取Assets圖片資源保存到SD卡實(shí)例
- android通過jxl讀excel存入sqlite3數(shù)據(jù)庫(kù)
- Android編程之SMS讀取短信并保存到SQLite的方法
- Android提高之SQLite分頁(yè)讀取實(shí)現(xiàn)方法
- Android SQLite操作之大數(shù)據(jù)處理與同時(shí)讀寫方法
- Android開發(fā)實(shí)現(xiàn)讀取assets目錄下db文件的方法示例
相關(guān)文章
Android圖片異步加載框架Android-Universal-Image-Loader
這篇文章主要介紹了Android圖片異步加載框架Android-Universal-Image-Loader,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
淺談Android硬件加速原理與實(shí)現(xiàn)簡(jiǎn)介
這篇文章主要介紹了淺談Android硬件加速原理與實(shí)現(xiàn)簡(jiǎn)介,本文嘗試從底層硬件原理,一直到上層代碼實(shí)現(xiàn),對(duì)硬件加速技術(shù)進(jìn)行簡(jiǎn)單介紹,感興趣的小伙伴們可以參考一下2018-07-07
Android開發(fā)中Activity屬性設(shè)置小結(jié)
Android應(yīng)用開發(fā)中會(huì)經(jīng)常遇到Activity組件的使用,下面就來講解下Activity組件。Activity的生命周期、通信方式和IntentFilter等內(nèi)容,并提供了一些日常開發(fā)中經(jīng)常用到的關(guān)于Activity的技巧和方法。通過本文,你可以進(jìn)一步了接Android中Activity的運(yùn)作方式。2015-05-05
Android 布局中的android:onClick的使用方法總結(jié)
這篇文章主要介紹了Android 布局中的android:onClick的使用方法總結(jié)的相關(guān)資料,設(shè)置點(diǎn)擊時(shí)從上下文中調(diào)用指定的方法,這里提供實(shí)例幫助大家理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
Android notifyDataSetChanged() 動(dòng)態(tài)更新ListView案例詳解
這篇文章主要介紹了Android notifyDataSetChanged() 動(dòng)態(tài)更新ListView案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Android開發(fā)之使用ExifInterface獲取拍照后的圖片屬性
這篇文章主要介紹了Android開發(fā)之使用ExifInterface獲取拍照后的圖片屬性,較為詳細(xì)的分析了ExifInterface類操作圖片的具體使用技巧,需要的朋友可以參考下2016-01-01
Android開發(fā)Flutter?桌面應(yīng)用窗口化實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Android開發(fā)Flutter?桌面應(yīng)用窗口化實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Android 動(dòng)畫之ScaleAnimation應(yīng)用詳解
本節(jié)講解ScaleAnimation 動(dòng)畫在應(yīng)用中的實(shí)現(xiàn),有需要的朋友可以參考下2012-12-12
Android 利用廣播監(jiān)聽usb連接狀態(tài)(變化情況)
這篇文章主要介紹了Android 利用廣播監(jiān)聽usb連接狀態(tài),需要的朋友可以參考下2017-06-06

