原帖地址:http://www.eoeandroid.com/thread-39421-1-1.html
在android开发中,我们离不开资源文件的使用,从drawable到string,再到layout,这些资源都为我们的开发提供了极大的便利,不过我们平时大部分时间接触的资源目录一般都是下面这三个。
/res/drawable
/res/values
/res/layout
但android的资源文件并不止这些,下面就为大家介绍一下另外三个资源目录
首先是/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节点时标记一下
if(eventType == XmlPullParser.START_TAG) {
if(xml.getName().equals("title")) {
inTitle = true;
}
}
//如过到达标记的节点则取出内容
if(eventType == XmlPullParser.TEXT && inTitle) {
((TextView)findViewById(R.id.txXml)).setText(
xml.getText()
);
}
xml.next();
eventType = xml.getEventType();
}
在这里,我们用资源类的getXml方法,返回了一个xml解析器,这个解析器的工作原理和SAX方式差不多,有关SAX的具体细节可以看看我的另一篇帖子:
http://www.eoeandroid.com/thread-33212-1-1.html
要注意的是,这里的xml文件,最终是会被编译成二进制形式的,如果大家想让文件原样存储的话,那么就要用到下一个目录啦,那就是/res/raw目录
这个目录的唯一区别就是,这里的文件会原封不动的存储到设备上,不会被编译为二进制形式,访问的方式也是通过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 assets 和 res/raw 区别。读取本地网页,读取文本字体样式,读取视频。
主要介绍了Android开发之资源目录assets与res/raw的区别,结合实例形式分析了Android开发中资源目录assets与res/raw的具体功能、使用方法与区别,需要的朋友可以参考下
Android 中获取Assets目录下的文件和子目录下的文件,获取raw文件夹下的文件
~/res/layout/activity_seciossauth.xml Assets: ~/assets/www/jquery.js ~/assets/www/jsrsasign.js ~/assets/www/oauth2.html ~/assets/www/oidc.html ~/assets/www/seciossauth.js 2. Usage Call SeciossAuth in ...
android编程实现: 1、在res目录下建立raw...2、在您的手机相册目录下(即:DCIM目录)新建两文本文件,分别命名为a1.txt和a2.txt,并将raw目录下的a1.txt和assets目录下a2.txt文件的文本内容复制到新建的同名文件中。
在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。 介绍...
Android 使用MediaPlayer播放assets或者raw目录的音频文件 https://blog.csdn.net/qq_31939617/article/details/80491552
go-echarts运行需要的几个文件被墙,解压放到本地工程目录即可,在代码http.HandleFunc("/", handler)上面加一行http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("./assets"))))
src/assets/js/ezuikit.js
方舟游戏框架,一个 2D 游戏框架。 文件 Ark-Game-Framework-master.zip 包含以下条目。 .gitignore//from ww w. jav a2 s . c o m Android Sample/.classpath Android Sample/.project Android Sample/...
res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹读取文件资源:读取res/raw下的文件资源,通过以下方
目的:当App中用到固定的json数据时,如:国家城市列表、班级成员等时,可以将json数据制作为本地json文件存入assets文件夹下。... // 获得assets资源管理器(assets中的文件无法直接访问,可以使用AssetManager访问
1.分别创建assets文件夹和res/raw文件夹:(要注意的raw文件是在res下new,然后创建一个名字为raw的文件夹) 2.创建两个txt文件,复制到asset和raw文件夹中: 3.实现的效果: 4.实现代码: (1)布局文件: &...
很多时候我们需要将资源文件以XML形式放在assets文件夹下,我写的这个demo是一个比较通用的获取xml输入流,解析xml获取想要数据的方法,希望对大家有帮助。
Android 读取raw、assets中的txt文件 https://blog.csdn.net/qq_31939617/article/details/80911124
/ace Admin v1.3/assets/avatars /ace Admin v1.3/assets/avatars/avatar.png /ace Admin v1.3/assets/avatars/avatar1.png /ace Admin v1.3/assets/avatars/avatar2.png /ace Admin v1.3/assets/avatars/avatar3....
/Assets/Plugins/iOS/UnityARKit/NativeInterface/ARSessionNative.mm /Assets/Plugins/iOS/UnityARKit/NativeInterface/UnityARSessionNativeInterface.cs 包含下面重要API: public void RunWithConfigAndOptions...
当eclipse项目add library后,运行项目时,eclipse并不会将library的assets和xml的配置,合并到项目中,此时需要...这个工具可以代替手动复制,自动合并所有assets和xml,也可以根据设置,只合并assets或只合并xml。