Android開發(fā)之資源目錄assets與res/raw的區(qū)別分析
本文實例講述了Android開發(fā)之資源目錄assets與res/raw的區(qū)別。分享給大家供大家參考,具體如下:
assets:用于存放需要打包到應用程序的靜態(tài)文件,以便部署到設備中。與res/raw不同點在于,ASSETS支持任意深度的子目錄。這些文件不會生成任何資源ID,必須使用/assets開始(不包含它)的相對路徑名。
res:用于存放應用程序的資源(如圖標、GUI布局等),將被打包到編譯后的Java中。不支持深度子目錄
res/menu:存放基于XML的菜單描述;
res/raw:存放通用的文件, 該文件夾內的文件將不會被編譯成二進制文件,按原樣復制到設備上。
res/values:存放字符串、尺寸值。
res/xml: 存放通用的XML文件
三個特殊的資源目錄 /res/xml /res/raw 和 /assets
在android開發(fā)中,我們離不開資源文件的使用,從drawable到string,再到layout,這些資源都為我們的開發(fā)提供了極大的便利,不過我們平時大部分時間接觸的資源目錄一般都是下面這三個。
/res/drawable
/res/values
/res/layout
但android的資源文件并不止這些,下面就為大家介紹一下另外三個資源目錄
/res/xml
/res/raw
/assets
首先是/res/xml ,這個目錄中大家可能偶爾用到過,這里可以用來存儲xml格式的文件,并且和其他資源文件一樣,這里的資源是會被編譯成二進制格式放到最終的安裝包里的, 我們也可以通過R類來訪問這里的文件,并且解析里面的內容,例如我們在這里存放了一個名為data.xml的文件:
<?xml version="1.0" encoding="utf-8"?> <root> <title>Hello XML!</title> </root>
隨后,我們就可以通過資源ID來訪問并解析這個文件了
XmlResourceParser xml = getResources().getXml(R.xml.data); xml.next(); int eventType = xml.getEventType(); boolean inTitle = false; while(eventType != XmlPullParser.END_DOCUMENT) { //到達title節(jié)點時標記一下 if(eventType == XmlPullParser.START_TAG) { if(xml.getName().equals("title")) { inTitle = true; } } //如過到達標記的節(jié)點則取出內容 if(eventType == XmlPullParser.TEXT && inTitle) { ((TextView)findViewById(R.id.txXml)).setText( xml.getText() ); } xml.next(); eventType = xml.getEventType(); }
在這里,我們用資源類的getXml方法,返回了一個xml解析器,這個解析器的工作原理和SAX方式差不多, 要注意的是,這里的xml文件,最終是會被編譯成二進制形式的,如果大家想讓文件原樣存儲的話,那么就要用到下一個目錄啦,那就是/res/raw目錄
這個目錄的唯一區(qū)別就是,這里的文件會原封不動的存儲到設備上,不會被編譯為二進制形式,訪問的方式也是通過R類,下面是一個例子:
((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,返回給我們一個輸入流,這樣我們就可以任意讀取文件中的內容了,例如上面例子中那樣,原樣輸出文本文件中的內容。
當然,如果你需要更高的自由度,盡量不受android平臺的約束,那么/assets這個目錄就是你的首選了。
這個目錄中的文件除了不會被編譯成二進制形式之外,另外一點就是,訪問方式是通過文件名,而不是資源ID。并且還有更重要的一點就是,大家可以在這 里任意的建立子目錄,而/res目錄中的資源文件是不能自行建立子目錄的。如果需要這種靈活的資源存儲方式,那么就看看下面這個例子:
AssetManager assets = getAssets(); ((TextView)findViewById(R.id.txAssets)).setText( readStream(assets.open("data.txt")) );
在context上下文中,調用getAssets返回一個AssetManager,然后使用open方法就可以訪問需要的資源了,這里open方法是以assets目錄為根的。所以上面這段代碼訪問的是assets目錄中名為data.txt的資源文件。
希望本文所述對大家Android程序設計有所幫助。
- Android操作存放在assets文件夾下SQLite數(shù)據(jù)庫的方法
- Android獲取assets文件夾中的數(shù)據(jù)并寫入SD卡示例
- Android讀取assets目錄下的所有圖片并顯示的方法
- 讀寫Android中assets目錄下的文件的方法詳解
- android讀取Assets圖片資源保存到SD卡實例
- android通過jxl讀excel存入sqlite3數(shù)據(jù)庫
- Android編程之SMS讀取短信并保存到SQLite的方法
- Android提高之SQLite分頁讀取實現(xiàn)方法
- Android SQLite操作之大數(shù)據(jù)處理與同時讀寫方法
- Android開發(fā)實現(xiàn)讀取assets目錄下db文件的方法示例
相關文章
深入解析Android系統(tǒng)中應用程序前后臺切換的實現(xiàn)要點
這篇文章主要介紹了Android系統(tǒng)中應用程序前后臺切換的實現(xiàn)要點,除了切換操作的效果之外還重點講解了判斷程序運行于前臺還是后臺的方法,需要的朋友可以參考下2016-04-04Android入門之RelativeLayout、FrameLayout用法分析
這篇文章主要介紹了Android入門之RelativeLayout、FrameLayout用法分析,需要的朋友可以參考下2014-08-08用Android?studio實現(xiàn)簡易計算器功能
這篇文章主要為大家詳細介紹了用Android?studio實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Android Notification.Builder通知案例分享
這篇文章主要為大家分享了Android Notification.Builder通知案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法
這篇文章主要介紹了studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法的相關資料,需要的朋友可以參考下2017-02-02