在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的资源文件~ 这三个目录中我们平时开发应用的时候,还是很实用的,这里发给大家,希望能对大家在开发应用时有所帮助~
一. 在应用中由于种种原因需要将一些外部文件放在 assets 或者 raw 文件夹内,以便进一步使用。这两个文件夹有以下的区别和联系: 1. 都是以数据流的形式进行读取,从而导致 Java 中其他的一些读取方式不能很好的作用在这些文件上面,例如 RandomAccessFile 、 FileReader 等之类的类。如果由于需要需要使用基于文件的类,则可以根据数据流创建创建临时文件( File.createTempFile )当做一个折中的办法。这是一种方法,下面将会介绍另一种方法 2. raw 文件夹中的文件不能包含有目录结构并且每个文件会映射到一个 id ,而 assets 文件夹可以有目录结构。对于对文件名敏感的程序则使用 raw 进行外部文件存储较为方便,而对于较依赖目录结构的文件则使用 assets 存储 3. 这两个文件夹中的文件都不能太大,官方数据是小于 1M 。这点需要时刻记住,因为产生的问题十分隐蔽,在程序中可以找到该文件也可以产生 inputStream 但是在读取时会抛出 IOException 异常。这中大文件需要先分割在进行读取 4. 这两个文件夹对文件名称大小写敏感,命名是尽量用小写,并且在分割合并后也要注意文件名称,否则程序会认为它们是不同的文件,但是在创建时会覆盖掉先前的文件(这点太隐蔽了, ~~~~(>_<)~~~~ )
|
分享到:
相关推荐
本文实例讲述了Android开发之资源目录assets与res/raw的区别。分享给大家供大家参考,具体如下: assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子...
Android中的资源文件夹主要有两个:res和assets。res文件夹用于存放编译后的资源文件,而assets文件夹用于存放原始文件。下面我们将详细介绍这两个文件夹的作用和如何从中读取文件。 res文件夹的主要作用是存放...
在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...
本示例“android读取raw和assets下资源文件demo”旨在教你如何在Android应用中有效地读取并处理存储在`res/raw`和`assets`目录下的资源文件。 一、res/raw目录 `res/raw`目录是Android资源系统的一部分,它允许...
raw文件夹位于项目的src/main/res/raw目录下,这个目录下的文件会被编译并打包到R.java文件中,可以通过资源ID来访问。与assets不同,raw文件夹中的文件必须遵循Android资源命名规则(小写字母和数字)。读取raw文件...
1.分别创建assets文件夹和res/raw文件夹:(要注意的raw文件是在res下new,然后创建一个名字为raw的文件夹) 2.创建两个txt文件,复制到asset和raw文件夹中: 3.实现的效果: 4.实现代码: (1)布局文件: &...
raw文件夹是Resources(res)的子目录,Android会自动为这个目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易地被Android的类和方法访问到,甚至在...
背景知识介绍与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,如/res/drawable, /res/xml, /res/values/, /res/raw, /res/layout和/assets。...
本示例源码着重展示了如何在Android设备上进行一系列的文件管理操作,包括创建文件夹、从raw资源目录和assets目录读取文件并保存到SD卡,以及对解压缩后的文件进行删除处理。下面将详细解析这些知识点。 1. **创建...
3. **assets/**: 这个目录可能包含非资源类型的数据,如原始文本文件或数据库。 4. **lib/**: 包含不同架构下的库文件,如armeabi、armeabi-v7a、x86等,供系统在运行时调用。 5. **res/raw/**: 存放未经处理的...
在Android开发中,`assets`目录是一个特殊的地方,用于存储应用程序需要但不通过SQLite数据库或资源文件系统访问的非结构化数据。这个目录下的文件在编译时会被原封不动地复制到APK中,因此在运行时可以使用`...
在Android中,可以通过`AssetManager`访问应用的assets目录中的XML文件,或者使用`open()`方法打开res/raw目录下的文件。对于外部存储的XML文件,需要获得文件路径后,再设置到解析器的输入源。 例如,从assets读取...
Android支持多语言和不同屏幕尺寸的资源,通过在`res`目录下创建不同的子目录(如`values-en`、`values-mdpi`)来实现本地化和适配。 总之,Android工程中的资源管理是一个有序而灵活的过程,通过合理的组织和访问...
在Android项目的`res`目录下,包含了各种类型的资源文件夹,用于存储不同的资源。这些资源在编译过程中会被转换为二进制形式,以便于在运行时快速访问。 - **`res/anim`**:存储动画资源,包括逐帧动画和补间动画。...
- 在Android应用开发中,声音资源通常存储在`res/raw`目录下,可以是音频片段、通知声效或用户操作反馈的声音。在微信6.0中,这些声音文件可能包括消息接收提示音、新好友添加提示音、语音通话接通与挂断音等。这些...
通常,我们可以将XML文件放在`assets`或`res/raw`目录下,然后通过`AssetManager`或`Resources`来访问它们。 总结一下,Android中使用SAX解析XML文件的关键步骤包括: 1. 创建`DefaultHandler`子类并重写事件处理...