`
landyer
  • 浏览: 142000 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

三个特殊的资源目录 /res/xml /res/raw 和 /assets

阅读更多

原帖地址:http://www.eoeandroid.com/thread-39421-1-1.html

 

 

在android开发中,我们离不开资源文件的使用,从drawable到string,再到layout,这些资源都为我们的开发提供了极大的便利,不过我们平时大部分时间接触的资源目录一般都是下面这三个。

/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节点时标记一下
        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的区别。分享给大家供大家参考,具体如下: assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子...

    android从assets和res中读取文件.pdf

    Android中的资源文件夹主要有两个:res和assets。res文件夹用于存放编译后的资源文件,而assets文件夹用于存放原始文件。下面我们将详细介绍这两个文件夹的作用和如何从中读取文件。 res文件夹的主要作用是存放...

    Android Assets文件和Raw文件读取

    在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...

    android读取raw和assets下资源文件demo

    本示例“android读取raw和assets下资源文件demo”旨在教你如何在Android应用中有效地读取并处理存储在`res/raw`和`assets`目录下的资源文件。 一、res/raw目录 `res/raw`目录是Android资源系统的一部分,它允许...

    android文件操作——读取assets和raw文件下的内容

    raw文件夹位于项目的src/main/res/raw目录下,这个目录下的文件会被编译并打包到R.java文件中,可以通过资源ID来访问。与assets不同,raw文件夹中的文件必须遵循Android资源命名规则(小写字母和数字)。读取raw文件...

    Android 读取assets和raw文件内容实例代码

    1.分别创建assets文件夹和res/raw文件夹:(要注意的raw文件是在res下new,然后创建一个名字为raw的文件夹)   2.创建两个txt文件,复制到asset和raw文件夹中: 3.实现的效果: 4.实现代码: (1)布局文件: &...

    Android 中raw和assets文件夹的区别

    raw文件夹是Resources(res)的子目录,Android会自动为这个目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易地被Android的类和方法访问到,甚至在...

    Android 原始资源文件的使用详解

    背景知识介绍与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,如/res/drawable, /res/xml, /res/values/, /res/raw, /res/layout和/assets。...

    文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.zip

    本示例源码着重展示了如何在Android设备上进行一系列的文件管理操作,包括创建文件夹、从raw资源目录和assets目录读取文件并保存到SD卡,以及对解压缩后的文件进行删除处理。下面将详细解析这些知识点。 1. **创建...

    framework-res.apk

    3. **assets/**: 这个目录可能包含非资源类型的数据,如原始文本文件或数据库。 4. **lib/**: 包含不同架构下的库文件,如armeabi、armeabi-v7a、x86等,供系统在运行时调用。 5. **res/raw/**: 存放未经处理的...

    android 文件读取(assets)

    在Android开发中,`assets`目录是一个特殊的地方,用于存储应用程序需要但不通过SQLite数据库或资源文件系统访问的非结构化数据。这个目录下的文件在编译时会被原封不动地复制到APK中,因此在运行时可以使用`...

    android Pull XML文件解析 存取 代码程序

    在Android中,可以通过`AssetManager`访问应用的assets目录中的XML文件,或者使用`open()`方法打开res/raw目录下的文件。对于外部存储的XML文件,需要获得文件路径后,再设置到解析器的输入源。 例如,从assets读取...

    Android工程资源文件的访问.doc

    Android支持多语言和不同屏幕尺寸的资源,通过在`res`目录下创建不同的子目录(如`values-en`、`values-mdpi`)来实现本地化和适配。 总之,Android工程中的资源管理是一个有序而灵活的过程,通过合理的组织和访问...

    Android资源文件(学习android必备)

    在Android项目的`res`目录下,包含了各种类型的资源文件夹,用于存储不同的资源。这些资源在编译过程中会被转换为二进制形式,以便于在运行时快速访问。 - **`res/anim`**:存储动画资源,包括逐帧动画和补间动画。...

    微信6.0android客户端用到的资源文件

    - 在Android应用开发中,声音资源通常存储在`res/raw`目录下,可以是音频片段、通知声效或用户操作反馈的声音。在微信6.0中,这些声音文件可能包括消息接收提示音、新好友添加提示音、语音通话接通与挂断音等。这些...

    android 实用sax 读取xml文件内容 附

    通常,我们可以将XML文件放在`assets`或`res/raw`目录下,然后通过`AssetManager`或`Resources`来访问它们。 总结一下,Android中使用SAX解析XML文件的关键步骤包括: 1. 创建`DefaultHandler`子类并重写事件处理...

Global site tag (gtag.js) - Google Analytics