android资源目录---assets与res/raw区别

android资源目录---assets与res/raw的不同

Android 2011-05-24 14:40:21 阅读20 评论0   字号:大中小 订阅

assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名。

res:用于存放应用程序的资源(如图标、GUI布局等),将被打包到编译后的Java中。不支持深度子目录

res/menu:存放基于XML的菜单描述;

res/raw:存放通用的文件, 该文件夹内的文件将不会被编译成二进制文件,按原样复制到设备上。

res/values:存放字符串、尺寸值。

res/xml: 存放通用的XML文件

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

在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方式差不多, 要注意的是,这里的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的资源文件~

摘自:http://blog.csdn.net/hshm20517/article/details/6461890

时间: 2024-12-28 01:11:33

android资源目录---assets与res/raw区别的相关文章

assets与res/raw资源目录的区别

Android : assets与res/raw资源目录的区别 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo 一,简介 在应用的开发中,当我们创建一个新的Android工程后,我们会发现工程中包含了一个目录assets,另外当我们察看一些示例工程的时候,有时会发 现在该工程的资源目录下会有一个raw目录(res/raw).那么assets和raw目录有什么用处呢?下面笔者将给与解释. 二,相同 assets和res/raw

AssetsUtils【读取assets、res/raw、./data/data/包名/目录下的文件】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 封装了以下功能: 1.读取assets目录下的资源html.文件.图片,将文件复制到SD卡目录中: 2.读取res/raw目录下的文件内容: 3.读写./data/data/包名/下的文件: 效果图 代码分析 最常用的方法:getStringFromAssert(Context mContext, String assetsFilePath)[读取assets目录中的文件字符串] 使用步骤 一.项目组织结构图 注意事项: 1.  导入类

【Android】资源系列(二) -- 文件原样保留的资源assets和res/raw目录

这两个目录都可以存放文件,而在打包的时候被原样保留. 那用这两个目录能够做什么事呢? 1.放一个apk,要用的时候调出来,免得去下载服务器下载. 2.放一个sql,当app数据库很大的时候,这可以省事很多. 3.放一段视频.录音等,作为开机启动的介绍,是不是很炫..... 那问什么要弄两个目录呢.... 其实assets翻译为"资源",raw翻译为"原始的",并且在res目录下,res故名思议,它下面放的就是资源,还有很多呢.例如动画.图片.xml.ids.valu

资源文件assets和 res下面raw文件的使用不同点

在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点: assets下面的文件不会被编译,通过路径可以去访问其中的内容.raw中文件会自动编译,我们可以在R.java文件中找到对应的ID, 看下面截图: 那么既然这样那我们平时该怎么样进行把资源放入这两个文件当中呢? 我个人平时喜欢比较文件的大小,如果文件比较大一点的会放入到aeests文件中,因为用这个文件文件

android——资源目录

res/drawable/图像型的资源文件: res/layout/可被编译成屏幕布局的xml文件: res/values/可被编译成多种类型的资源文件: (1)array.xml 定义数组: (2)colors.xml 定义颜色和颜色字符串值,分别用Resource.getDrawable()和Resource.getColor()方法获取这些资源: (3)dimens.xml定义尺寸数据,可以用Resource.getDimension()方法取得这些资源: (4)string.xml定义字

vue2.0 资源文件assets和static的区别

资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解webpack是怎样处理静态资源的.在*.vue组件中,所有的templates和css都会被vue-html-loader 和 css-loader解析,寻找资源的URL. 举个例子,在<img src="./logo.png"> 和 background: url(./logo.

assets res/raw 存放资源的限制 以及 读取方法

res/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 读取文件资源: 1.读取

Android的xml/assets/raw资源使用详解

一.assets/xml/raw资源介绍 1.assets资源目录:assets目录下存放的资源代表应用无法直接访问的原生资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式,访问方式是通过文件名而不是资源ID.应用程序通过AssetManager以的字节流的形式来读取资源文件.assets与res/raw的区别是assets支持任意深度的子目录,这些资源文件不会生成任何资源ID.Android应用访问assets文件夹资源步骤如下: (1)先在Activity中调用getAssets

Android Studio增加assets目录、raw目录

assets与res/raw不同 assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件. Android还存在一种放置在res下的raw目录,该目录与assets目录不同. 注意点: 1. assets目录不会被映射到R中,因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取:res/raw目录下的资源会被映射到R中,可以通过getResource()方法获取资源. 2. 多级目录:ass