Android中资源文件夹res/raw和assets的使用
*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下的文件资源,通过以下方式获取输入流来进行写操作
- InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
- AssetManager am = null;
- am = getAssets();
- 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的使用的更多相关文章
- android开发如何获取res/raw和assets文件夹的路径
---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...
- res/raw和assets的 区别
res/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.ja ...
- Android res/raw vs assets
common: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. difference: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源I ...
- Android MediaPlayer播放项目res/raw和res/assets下的音频文件
1..播放res/raw //方法一:根据音频文件的ID来创建MediaPlayer MediaPlayer mp = new MediaPlayer(this,R.raw.test); mp.sta ...
- 三个特殊资源目录 /res/xml /res/raw 和 /assets
在android开发中,我们离不开资源文件的使用,从drawable到string,再到layout,这些资源都为我们的开发提供了极大的便利,不过我们平时大部分时间接触的资源目录一般都是下面这三个. ...
- res/raw与assets目录的区别
1.相同点: 两者都会原封不动的保存在apk包中,不会被编译成二进制码. 2.不同点: raw目录下只能存放文件,不能存放下一级的文件夹,而assets可以存放下一级的文件夹. raw目录下的资源会映 ...
- Android开发:第四日番外——Assets文件夹和RAW文件夹区别
话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...
- 【转】android资源目录---assets与res/raw区别
blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...
- android assets与 assets与res/raw 的相同、不同点
1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过 //也可以放置图片等资源,获取方式相同 Conte ...
随机推荐
- Excel 读写操作
读 import xlrd from xlrd.book import Book from xlrd.sheet import Sheet from xlrd.sheet import Cell wo ...
- mysql的5.6版本支持分区吗?
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/72291698 本文出自[我是干勾鱼的博客] 我们知道,查看mysql是否支持分区 ...
- Delphi Xe4 游戏开发的技术选型.
asphyre 是支持 FireMonkey的. 利用Firemonkey的跨平台接口.实现 win,mac,ios. 其它方案估计就得靠 FPC 了. 好处是多了输出Andriod的可能. zeng ...
- Linux下安装SVN(Subversion)
一.安装直接运行命令用YUM安装: yum install subversion -y 二.创建版本库创建版本库用svnadmin create命令,大概语法是svnadmin create svn库 ...
- Kali Linux ettercap的使用
ettercap是执行ARP欺骗嗅探的工具,通常用它来施行中间人攻击. 我还介绍过另一个arp欺骗工具-arpspoof 我使用的是Kali Linux 2.0:在开始使用ettercap之前,先配置 ...
- 在javascript中使用提示信息来熟悉当前的程序流程
最近,因为需要,开始了解javascript,这个对我来说是个新的东西,在分析现有程序的功能的时候,需要增加一些提示信息来帮助了解程序的处理流程.于是在网上了解了一下提示信息的使用和区别.在此整理一下 ...
- ActionContext介绍(在Struts2中)
一种属性的有序序列,它们为驻留在环境内的对象定义环境.在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步.事务.实时激活.安全性等等.多个对象可以存留在一个上下文内.也有根据上下文理解 ...
- c#代碼小集
一.字符串[Uri]轉換出RouteData private RouteData UriToRouteData(Uri uri) { var query = uri.Query; ) { query ...
- Windows Communication Foundation (WCF)和Windows CardSpace的示例程序
微软公司昨天发布了一个Windows Communication Foundation (WCF)和Windows CardSpace的示例程序包,内容极为丰富,从最简单的Hello World到复杂 ...
- bzoj 2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 分层图两种方法的练习. 1.把图分成k+1层,本层去上面一层的边免费.但空间时间都不算 ...