介绍

assets目录(app_ame\module_name\src\main\assets)和raw目录(app_ame\module_name\src\main\res\raw)下的资源只能读取,不能写入,资源文件在打包后会原封不动的保存在apk包中,不会被编译成二进制文件,可以存放音频,视频文件,文件的大小被限制在1M以下,推荐放入assets目录下。

二者的不同点在于:
res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。另外res/raw不可以有目录结构,而assets则可以有目录结构(在其目录下可以再建文件夹)

读取的方式

1.读取res/raw下的文件资源,通过以下方式获取输入流:

InputStream is = getResources().openRawResource(R.raw.filename);

2.读取assets下的文件资源,通过以下方式获取输入流:

InputStream is = getResources().getAssets().open("filename");

assets详解

AssetManager类

提供对应用程序的原始资源文件进行访问,这个类提供了一个低级别的API,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。通过getAssets()方法获取AssetManager对象。

AssetManager类常用方法:

final String[]  list(String path)    //返回指定路径下的所有文件及目录名。final InputStream  open(String fileName)    //使用 ACCESS_STREAMING模式打开assets下的指定文件。.final InputStream  open(String fileName, int accessMode)    //使用显示的访问模式打开assets下的指定文件.

AssetFileDescriptor

在AssetManager中一项的文件描述符。这提供你自己打开的FileDescriptor可用于读取的数据,以及在文件中的偏移量和长度的该项的数据。可以通过AssetManager的openFd()的方法获取asset目录下指定文件的AssetFileDescriptor对象。

AssetFileDescriptor常用方法:

FileInputStream  createInputStream()    //为asset创建并返回一个自动关闭的输入流。
FileOutputStream  createOutputStream()    //为asset创建并返回一个自动关闭的输出流。
FileDescriptor  getFileDescriptor()    //返回可用于读取文件中的数据的FileDescriptor对象。
long  getLength()    //返回该asset中项的数据的总字节数。
long  getStartOffset()    //返回asset中项的数据字节开始偏移。

assets使用案例

将assets文件夹下的文件拷贝到/data/data/下

因为assets文件夹下的文件只能读,不能写,而且有1M的限制,超过1M无法读取,所以我们有时要把assets文件夹下的文件拷贝到/data/data/下然后操作文件。

/*** 将assets文件夹下的文件拷贝到/data/data/下** @param context* @param fileName*/
private void copyDbFile(Context context, String fileName) {InputStream in = null;FileOutputStream out = null;String path = "/data/data/" + context.getPackageName() + "/audiofile/";File file = new File(path + fileName);//创建文件夹File filePath = new File(path);if (!filePath.exists())filePath.mkdirs();if (file.exists())return;try {in = context.getAssets().open(fileName); // 从assets目录下复制out = new FileOutputStream(file); int length = -1;byte[] buf = new byte[1024];while ((length = in.read(buf)) != -1) {out.write(buf, 0, length);}out.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (in != null) in.close();if (out != null) out.close();} catch (IOException e1) {e1.printStackTrace();}}
}

播放assets下的音乐

// 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象
AssetFileDescriptor afd = am.openFd(music);
mPlayer.reset();
// 使用MediaPlayer加载指定的声音文件。
mPlayer.setDataSource(afd.getFileDescriptor(),  afd.getStartOffset(), afd.getLength());
// 准备声音
mPlayer.prepare();
// 播放
mPlayer.start();

END

本文参考:

Android中资源文件:assets和raw详解----陈利健

Android开发之assets目录下资源使用总结

Android中文件的读写---assets和raw下的资源文件相关推荐

  1. android中的BitMap(二)从网络和资源文件中获得一个BitMap

      //取得网络上图片资源的路径 String urlstring="http://img.wallba.com/Public/Upload/Image/qichebizi/ asidunm ...

  2. Android读写assets、raw、sdard和工程文件的方法

    Android开发离不开对文件的操作,前面的文章"Android简易数据存储之SharedPreferences"和"Android数据存储之SQLite的操作" ...

  3. Android 使用MediaPlayer播放assets或者raw目录的音频文件

    不废话,需求:当接收到推送消息时,播放apk自带的声音,怎么办? 首先接入极光推送,我前几篇文章已经讲了,不会的自己去看.在MyReceiver里的public void onReceive(Cont ...

  4. java 读取raw文件_Android 读取assets和raw文件内容实例代码

    这篇文章主要介绍了Android 读取assets和raw文件内容的相关资料,并附简单实例代码,需要的朋友可以参考下 android之文件操作--读取assets和raw文件下的内容 1.分别创建as ...

  5. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  6. python3查找文件中指定字符串_Python3在指定路径下递归定位文件中出现的字符串...

    [本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 代码如下: import os import sys __all ...

  7. Linux怎么让文件按大小排序,linuxsortlinux系统下,按文件的大小进行排序的命令...

    怎样用sort 命令以 GPA作为关键字排序文件 Linux可以使用ls命令实现这一功能. ls命令是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多. ls命令默认是按照文件名的字母 ...

  8. php 删除文件夹及文件夹,php删除一个路径下的所有文件夹和文件的方法

    php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用. 也适合在thinkphp中清理缓存,在thinkphp中 ...

  9. opengl png图片 qt_Qt资源文件的格式,并用CMake添加Qt资源文件

    目录 ......QRC文件的写法用CMake添加Qt资源文件添加QRC文件的函数步骤CPP中使用QRC文件使用QRC文件实例程序结果QRC文件CMakeLists.txt文件Dialog.h文件Di ...

  10. python找不到文件数据_如何用 Python 正确读取资源文件

    我们知道,当你把一个资源文件和一个.py文件放在一起的时候,你可以直接在这个.py文件中,使用文件名读取它.例如: 运行效果如下图所示: 但请注意,这里我是直接运行的read.py这个文件.如果资源文 ...

最新文章

  1. springboot_4 spring boot 使用servlet,filter,listener和interceptor
  2. 【TYVJ】1359 - 收入计划(二分)
  3. 机器学习实战15-自动编码器
  4. 应用 | Redis实现 主从,单例,集群,哨兵,配置应用
  5. mysql 导出bson格式_mongodb 导入导出GridFS【图片/文件/视频/音频等多媒体文件的导入导出】...
  6. android零基础教程,Android零基础入门|Activity初入门,创建和配置如此简单
  7. Part I. S3. 区间直觉模糊集理论
  8. 三调专题(一)宗地四至提取的量化算法及FME实现
  9. 调试笔记:BSOD 0xA
  10. ZOJ 3527 Shinryaku! Kero Musume 【树形DP[带简单环]】
  11. 夜神模拟器adb找不到
  12. google/filament 场景(Scene)管理
  13. 华为面试100题:java开发工程师(中)
  14. 同程旅游火车票部门面经
  15. 用python来画出高光谱遥感影像的3D立体图
  16. 又一AI大牛回国任教!沈春华加盟浙江大学,曾获澳大利亚科研终身成就奖
  17. 《你好,放大器》----学习记录(一)
  18. springboot项目实现excel导出
  19. 基于token的登录管理(多设备登录、单设备登录)
  20. 10.5 UiPath如何调用百度OCR

热门文章

  1. c# forbidden.html,C#Web API方法返回403 Forbidden
  2. (笔记)数据结构——顺序表
  3. 审美灵感|插画配色分享
  4. 2021中国开源优秀人物榜出炉!
  5. 论文写作 之 Related work
  6. 微服务架构 VS 单体架构
  7. 2017世界GDP排行地图可视化
  8. java mp4_java Mp4一边下载一边播放
  9. edge浏览器设置启动时默认打开新标签页
  10. [渝粤教育] 北京化工大学 自然辩证法概论 参考 资料