2011-12-08 11:05 494人阅读 评论(0) 收藏 举报

*res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

*读取文件资源:

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

  1. InputStream is = getResources().openRawResource(R.id.filename);

2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

  1. AssetManager am = null;
  2. am = getAssets();
  3. InputStream is = am.open("filename");

补充一下:在未知目录下有哪些文件,该去和获取这些文件的名称并把文件拷贝到目标目录中呢?(用于内置文件但不知道文件名称,需要筛选出想要的文件然后拷贝到目标目录中,推荐内置在assets文件夹中)
1.res/raw目录:
通过反射的方式得到R.java里面raw内部类里面所有的资源ID的名称,然后通过名称获取资源ID的值来读取我们想要的文件。(这个方法我没试过,有用过的同学麻烦发一段代码看看)。
2.assets目录:
getAssets().list("");来获取assets目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。

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=xilie.org"1.0" encoding="utf-8"?>

<root>

<title>Hello XML4008301199.com!</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的资源文件~

Android中资源文件夹res/raw和assets的使用的更多相关文章

  1. android开发如何获取res/raw和assets文件夹的路径

    ---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...

  2. res/raw和assets的 区别

    res/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.ja ...

  3. Android res/raw vs assets

    common: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. difference: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源I ...

  4. Android MediaPlayer播放项目res/raw和res/assets下的音频文件

    1..播放res/raw //方法一:根据音频文件的ID来创建MediaPlayer MediaPlayer mp = new MediaPlayer(this,R.raw.test); mp.sta ...

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

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

  6. res/raw与assets目录的区别

    1.相同点: 两者都会原封不动的保存在apk包中,不会被编译成二进制码. 2.不同点: raw目录下只能存放文件,不能存放下一级的文件夹,而assets可以存放下一级的文件夹. raw目录下的资源会映 ...

  7. Android开发:第四日番外——Assets文件夹和RAW文件夹区别

    话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...

  8. 【转】android资源目录---assets与res/raw区别

    blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...

  9. android assets与 assets与res/raw 的相同、不同点

    1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过   //也可以放置图片等资源,获取方式相同 Conte ...

随机推荐

  1. 在Ubuntu 14.04 TLS下openvas V8.0源代码安装过程

    [Qboy原创]详细记录源代码的安装过程 1.下载原代码 在http://www.openvas.org/install-source.html下载 Libraries 8.0.8 Scanner 5 ...

  2. 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析

    3.2.4 KieServices 该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KS ...

  3. php小练习——实现几种不同的金字塔

    首先,从简单的着手,打印出金字塔的右半部分,代码如下 <?php $n=5; //金字塔行数 //外层的for循环控制层数 for($i=1;$i<=$n;$i++){ //内层的for循 ...

  4. 人生苦短之我用Python篇(安装第三方库、正则表达式)

    安装第三方库 两种方法, 一.在DOS界面下运行 pip3 install requests 二.切换至request目录下 cd E:\ python3 setup.py install ----- ...

  5. eclipse中package explore和project explore 怎么相互切换???

    window--->show view--->other---->Java---->Package Explorer或者选project explore之后就可以相互切换了

  6. Elasticsearch.net项目

    Elasticsearch.net项目实战 https://www.cnblogs.com/lucky_hu/p/9746736.html elasticsearch.net项目实战 @智客幸达 目录 ...

  7. 剑指offer-第三章高质量代码(树的子结构)

    题目:输入两个二叉树A和B,判断B是不是A的子结构. 思路:遍历A树找到B树的根节点,然后再判断左右子树是否相同.不相同再往下找.重复改过程. 子结构的描述如下图所示: C++代码: #include ...

  8. matlab滤波器的设计

    求出濾波器的階數以及 3dB 截止頻率後,可用相應的 Matlab 函數計算出實現傳遞函數的分子分母係數來.巴特沃斯型濾波器是通帶內最大平坦.帶外單調下降型的,其計算命令是:[b,a] = butte ...

  9. ZenCoding[Emmet]語法簡介【轉】

    快速指南 下面是一些常用的Zen Coding功能,目前VS2013的Web Essentials插件已经支持. '#' 创建一个id特性 '.' 创建一个类特性 '[]' 创建一个自定义特性 '&g ...

  10. SSM框架——整合搭建流程

    1.首先创建maven工程,使用哪种方式进行创建都可以,可以参考博主之前的文章: <两种方式创建Maven项目[方式二]><两种方式创建Maven项目[方式一]> 2.先看看搭 ...