android res raw资源之res/raw和assets的异同

Android res/raw文件以及raw与res/assets异同 - sinat_的博客 - CSDN博客
Android res/raw文件以及raw与res/assets异同

&res/raw文件以及raw与res/assets异同
通常,如果Android开发者有些文件比如音频,视频,.html,.mp3等等这些文件不希望编译器编译而保持原始原貌打包进apk文件(这在游戏开发中很常见和普遍,如游戏用到的游戏音乐、图等资源),那么可以使用Android在res目录下的res/raw和res/assets来保存。res/raw和res/assets目录下的文件将不被Android编译成二进制,Android将这些文件资源保持原状原封不动的打包进最终编译发布时候的apk文件。
res/raw和res/assets和既有相同点也有不同点。
(1)res/raw目录下的文件将被Android映射成R.id.xxx资源,访问该raw目录下的文件资源,可以通过R.id.filename获得映射,进而文件操作。但res/assets则不是这样,res/assets目录下的文件不会进行R.id. filename这样的映射,res/assets目录下的文件存放和访问模型与文件系统的读写模型类似。
(2)res/assets目录下的文件结构可以出现层级和树形结构;而res/raw则不能分层级。换句话说,可以在res/assets建立多层级、树形的文件目录结构,而res/raw下的文件资源必须平铺放在res/raw目录下。
(3)文件大小方面。在res/raw目录下的单个文件大小可以大到若干MB的尺寸,但res/assets文件目录下的单个文件大小尺寸尽量控制在MB量级以下,否则可能要出问题。
(4)res/assets目录下的文件资源访问一般是这样(如附录文章1所示):
AssetManager am=getAssets();&&
InputStream is=am.open(&filename&);&&
即通过AssetManager访问res/assets目录下资源。
res/raw目录下的文件资源访问一般是这样:
InputStream is =getResources().openRawResource(R.id.filename);
res/raw目录下的文件资源也可以通过这样先获得URI定位:
Uri uri= Uri.parse(&android.resource://&+getPackageName()+&/&+ R.raw.filename);
(5)res/raw和res/assets目录下文件为只读。
给出一个读取raw数据的例子。
事先现在res目录下新建一个目录raw,然后在里面新建一个名为:zhangphil.txt的文件,该文件只有一行简单的字符串,注意编码格式是UTF-8,如图:
然后写Java代码:
代码运行结果输出:
我的热门文章【Android】资源系列(二) -- 文件原样保留的资源assets和res/raw目录
时间: 18:00:53
&&&& 阅读:63
&&&& 评论:
&&&& 收藏:0
标签:这两个目录都可以存放文件,而在打包的时候被原样保留。
那用这两个目录能够做什么事呢?
1、放一个apk,要用的时候调出来,免得去下载服务器下载。
2、放一个sql,当app数据库很大的时候,这可以省事很多。
3、放一段视频、录音等,作为开机启动的介绍,是不是很炫。。。。。 &
那问什么要弄两个目录呢。。。。
其实assets翻译为&资源&,raw翻译为&原始的&,并且在res目录下,res故名思议,它下面放的就是资源,还有很多呢。例如动画、图片、xml、ids、values 等等。。。
所以通俗的理解就是
1、assets是为apk的外部资源准备的,可以理解为外挂目录,它可以有文件结构。
2、raw属于apk的自有资源,并且会在R文件中生成它的ID。
明白了它们存在的理由,那也就知道访问它们的方式是不一样的。
assest :利用AssetManager来获取资源。getAssets()定义在Context中,用于获取AssetManager。至于AssetManager,它下面的list,open等方法就是读取文件的咯。
raw:它会在R中生成ID,那获取就更加容易了,getResources().openRawResource() 用于获取输入流。
这里聊下如何将apk放在raw中,并且在程序中安装。
1、拷贝需要放的apk放在raw目录下,改名为tmp.apk
2、在需要安装的地方调用安装方法。ps(用uri的&android.resource&怎么都不行,求高人指点。用apache-common-io包提供的简洁方法更迅速)
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+&/app_tmp.apk&);
FileUtils.copyInputStreamToFile(getResources().openRawResource(R.raw.tmp), file);
} catch (NotFoundException e) {
} catch (IOException e) {
Util.install(AddDeviceActivity.this, Uri.fromFile(file));
* 安装一个app
* @param context
* @param filePath 需要安装的文件路径
public static void install(Context context, Uri uri) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(uri, &application/vnd.android.package-archive&);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
3、原理是不是一看就懂啊,是的,将输入流输出到SD卡上并生成一个文件,将file传入uri就可以安装了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:原文:http://blog.csdn.net/fcly2013/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!sponsored links
Android raw文件夹和assets文件夹
1.res/raw 存放运行时想使用的原始文件(文件不被处理成二进制形式)
..........................................................(文件处理成二进制形式)
raw下文件访问:(子文件夹中的内容访问不到)通过Resource,并提供资源ID访问
使用方式:InputStream is=context.getResources().openRawResource(R.id.finleName);
assets下文件访问: (子文件夹中的内容可以访问,文件路径相对于assets文件夹的路径)通过AssetManager来访问。
使用方式:InputStream is = context.getAssets().open("config/ui.txt");
//实际路径
/assets/config/ui.txt
Assets目录下的文件的列举
temp=assmgr.list("");//列出asset下的文件
for(String s:temp){
Log.i("data", s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("data",e.toString());
assetmanager.list("") 将列出assets下的所有文件和文件夹,以及文件下的内容
assetmanager.list("assets")将列出noting,没错,就是什么也没有
Assetmanager.list("/")
注意的问题:
1.资源文件只能以InputStream方式读取
2.所有资源文件都是只读的,运行时无法修改
3.所有资源文件夹assets、res也都是只读的,不可写入,Apk在编译后无法修改
4.如果想对资源文件进行修改,可对文件进行copy建立temp(临时文件),对临时文件进行修改,再使用,用到了java Io流的方法 File.createTempFile();
5.对于资源文件大小限制的说明Android系统对资源文件(res/raw和assets文件夹下)的大小有限制,2.3之前默认最大仅支持1M的文件,2.3之后貌似&=10M
6.目前自己开发用到的及时内置数据库,如果你的应用中较大的数据需要使用,由于在应用加载是去下载数据会很耗时,可以使用内置数据库的方法。
本文出自 “小鸟学C变大鹏” 博客,请务必保留此出处http://vincenttung./3715
因为这次的项目需要自带数据,所以就就把数据都放到一个SQLite的数据库文件中了,之后把该文件放到了assets文件夹下面.一开始打算每次都从assets文件夹下面把该文件夹拷贝到手机的SD卡或者手机自身的存储上之后再使用,后来考虑到每次都拷贝的话效率不高,并且如果涉及到对数据库的修改操作的话拷贝之后数据就被恢复了. 因此就写了该封装,该封装只是在第一次使用 ...
话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和assets的相同点 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. 二.res/raw和assets的不同点 1.res/raw中 ...
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件比较简单,通过R.XXX.ID即可: 第二种是assets目录下存放的原生资源文件: 因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过R. ...
1.概述 在写app的时候不可避免需要用到一些文件,或者是资源.而又不能放在drawable中 Android提供了两种存放未处理的资源方式:res/raw文件夹,assets文件夹 参考: /guide/topics/resources/providing-resources.html
恢复内容开始 最近在研究assets文件夹的一些属性跟使用方法.根据网上一些文章.实例做一下汇总,拿出来跟大家分享下,有不足的地方还请多多指教.
首先了解一下assets是干什么用的,assets英文单词的表面意思是资产.资源,顾名思义,这个文件夹下放的肯定是一些资源文件,而且 assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 ...君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Android中资源文件夹res-raw和assets的异同
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Android中资源文件夹resraw和assets的使用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Android中资源文件夹resraw和assets的使用
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 android res raw uri 的文章

 

随机推荐