在应用的开发中,当我们创建一个新的Android工程后,我们会发现工程中包含了一个目录assets,另外当我们察看一些示例工程的时候,有时会发现在该工程的资源目录下会有一个raw目录(res/raw)。那么assets和raw目录有什么用处呢?下面笔者将给与解释。

assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据。),这些文件将被打包到APK中应用使用。assets目录下的文件将不做任何处理被打包,而res/raw目录下的文件,有些文档说会编译为二进制,有些文档说不会。笔者认为这些不是很重要,一个原则那就是最好不要将过大的文件打包到APK中,如果你的资源很大,例如视频等等,应该单独存储在文件系统中。这两个目录的区别主要是assets目录下的文件不会被映射到R.java中,即系统不会自动为其生成一个资源ID.另一方面,由于系统会为res目录下的所有资源生成相应的资源ID,所以raw中的文件也不例外。综上,我们可以通过ID去访问res/raw目录中的任何文件,而assets目录中的文件就需要借助AssetManager去访问了。最后二者还有一个区别,assets目录允许下面有多级子目录,而res/raw下不允许存在目录结构。

读取文件举例 :
1.assets目录

AssetManager a = getAssets()  ;
//fileName为assets目录下需要访问的文件的名称
InputStream is = a.open(fileName) ;
//然后就可以通过输入流来读取fileName的内容了。

另外,我们可以通过a.openFd(fileName)得到的AssetFileDescriptor对象来获得fileName文件的信息,例如长度等。我们也可以通过a.list(“”)得到assets目录下的所有文件和子目录名称的数组,通过a.list(SubFolderName), 得到assets/SubFolderName下所有的文件和子目录名称的数组。

2.res/raw目录

InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID为需要访问的文件对应的资源ID.接着我们就可以通过输入流来读取相应文件的内容了。

补充 :
如果我们必须要将大于1M的文件打包到APK中,如果当前Android OS版本有1M容量的限制那我们怎么办?条条大陆通罗马,这种情况下我们可以将这些大文件事先分割成多个小于1M的文件,
然后打包。在程序需要读取的时候,我们可以将这些分割文件依次读出,然后合并。这样非常麻烦。总之,APK中不建议打包Size很大的文件。

播放RAW目录下视频问题
mVideoView = (Simple) findViewById(R.id.videoView);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnPreparedListener(this);
mUri = Uri.parse("android.resource://" + getPackageName() + "/"+ R.raw.demodave);
mVideoView.setVideoURI(mUri);

Android中asset文件夹和raw文件夹区别
http://blog.csdn.net/leichelle/article/details/7884052

android工程下assets与raw文件夹的更多相关文章

  1. Android Studio的使用(十)--读取assets、Raw文件夹下文件,以及menu、drawable文件夹

    1.直接在/src/main目录下面新建assets目录 2.接下来即可读取文件 3.读取Raw文件夹下文件也类似.首先在res文件夹下新建raw目录,然后放入需要的文件即可读取. 4.menu和dr ...

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

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

  3. Android读取asserts和raw文件夹下的文件

    Android读取asserts和raw文件夹下的文件 经常需要用到读取“/res/raw”和"/asserts"文件夹下的文件,索性写成工具类方便以后使用. 一.raw文件夹下的 ...

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

    这两个文件夹都能够存放文件.而在打包的时候被原样保留. 那用这两个文件夹可以做什么事呢? 1.放一个apk,要用的时候调出来.免得去下载server下载. 2.放一个sql,当app数据库非常大的时候 ...

  5. Android中asset文件夹和raw文件夹区别

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

  6. Android中asset文件夹和raw文件夹区别与用法

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

  7. Android中asset文件夹与raw文件夹的区别深入解析(转)

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

  8. Android中asset文件夹和raw文件夹区别(转载)

    原文地址:http://www.cnblogs.com/leizhenzi/archive/2011/10/18/2216428.html *res/raw和assets的相同点: 1.两者目录下的文 ...

  9. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

随机推荐

  1. 通过Samba实现Linux与Windows间的文件共享

    Samba Samba,是用来让Linux系列的操作系统与Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网 ...

  2. ethereum(以太坊)(二)--合约中属性和行为的访问权限

    pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...

  3. react native "Unable to resolve module `AccessibilityInfo`

    error: bundling failed: "Unable to resolve module `AccessibilityInfo` from `/Users/apple/Websto ...

  4. 使用命令行设置MySql编码格式

    使用命令行设置MySql编码格式 1.登录mysql 2.输入 SHOW VARIABLES LIKE 'character_set_%'; 3.查看 value值是否为utf8,如果不是,则使用SE ...

  5. 爬取多个url页面数据--手动实现

    # -*- coding: utf-8 -*- import scrapy from qiubaiByPages.items import QiubaibypagesItem class Qiubai ...

  6. C语言基础篇(三) 指针

    导航: 1.指针     2. 数组     3. 结构体,共用体     4. 内存分布图     5. 段错误分析 ----->x<------------->x<---- ...

  7. [Bzoj4818]序列计数(矩阵乘法+DP)

    Description 题目链接 Solution 容斥原理,答案为忽略质数限制的方案数减去不含质数的方案数 然后矩阵乘法优化一下DP即可 Code #include <cstdio> # ...

  8. tar命令,vi编辑器

    一.将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖): [root@localhost /]# cat /etc/passwd /etc/group > 1.txt ...

  9. 《Cracking the Coding Interview》——第5章:位操作——题目8

    2014-03-19 06:33 题目:用一个byte数组来模拟WxH的屏幕,每个二进制位表示一个像素.请设计一个画水平线的函数. 解法:一个点一个点地画就可以了.如果要优化的话,其实可以把中间整字节 ...

  10. 打包成apk,生成apk文件,上传到网站服务器提供链接下载

    Android开发把项目打包成apk: 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android ...