美文网首页
assets目录和res/raw目录的区别

assets目录和res/raw目录的区别

作者: 贝贝ovo | 来源:发表于2017-10-30 20:26 被阅读172次

项目中,欢迎页背景为视频,就视频文件到底放在哪个地方这一问题,跟同事观点有些不合,查阅相关资料,在此记录。
网上关于assets和raw的资料确实都千篇一律了,看我这篇摘录或者下面这两篇差不多了
http://www.cnblogs.com/yuzhongzheng/p/5412576.html
http://blog.csdn.net/blogblj/article/details/21228963

相同点:
assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,现在无此限制,具体查看这篇文章http://blog.csdn.net/blogblj/article/details/21228963)两个文件夹下的文件都会被原封不动的打包到APK中应用使用。而不会像其它资源文件那样被编译成二进制的形式。(不管放在哪个文件夹下apk的大小是不变的)

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

问Android中assets目录和raw目录的区别和使用情况
能提出这个问题的,应该都了解它们的共同点:
它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。
要说区别,当然最直观的就是获取它们的InputStream的API不一样了。
assets:InputStream assets = getAssets().open("xxxx");
raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)
有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?

有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?
下面我们来说说它们主要的区别:
由于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适的。

assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。

The main differences between the raw folder and the Assets folder.
https://stackoverflow.com/questions/9563373/the-reason-for-assets-and-raw-resources-in-android

Since raw is a subfolder of Resources (res), Android will automatically generate an ID for any file located inside it. This ID is then stored an the R class that will act as a reference to a file, meaning it can be easily accessed from other Android classes and methods and even in Android XML files. Using the automatically generated ID is the fastest way to have access to a file in Android.

The Assets folder is an “appendix” directory. The R class does not generate IDs for the files placed there, so its less compatible with some Android classes and methods. Also, it’s much slower to access a file inside it, since you will need to get a handle to it based on a String. However some operations are more easily done by placing files in this folder, like copying a database file to the system’s memory. There’s no (easy) way to create an Android XML reference to files inside the Assets folder.

1.网上有些文章说可以这样获取assets的绝对路径
String path = "file:///android_asset/文件名";
测试是不可以的

2.读取文件资源:
1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null;
am = getAssets();
InputStream is = am.open("filename");

3.assets目录的位置问题,在Eclispe中,这个目录的位置在res/下面,但到了Android Studio中,这个assets目录必须放在跟java和res同级目录下

4.Android中读取assets目录下的文件详细介绍
http://blog.csdn.net/greathfs/article/details/52123984

相关文章

  • android面试题?

    1.Android 项目中 asset 目录和 res 目录有什么区别res/raw和assets的相同点:htt...

  • assets和res/raw目录区别

    相同点: 两个文件夹下的文件都不会被编译为二进制文件,都会原封不动的放到apk包中。 不同点 assets内可以有...

  • assets目录和res/raw目录的区别

    项目中,欢迎页背景为视频,就视频文件到底放在哪个地方这一问题,跟同事观点有些不合,查阅相关资料,在此记录。网上关于...

  • apk打包流程

    aapt资源编译 编译assets目录和res/raw目录下的资源 编译res目录下的资源文件 给res目录下的每...

  • Android Studio增加assets目录、raw目录

    assets与res/raw不同 assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且...

  • Android Resources之assets

    Assets资源 assets/和res/raw目录 相同之处 两者目录下的文件在打包后会原封不动的保存在apk包...

  • Assets和res目录的区别

    立一个Android项目后会产生assets与res的两个文件夹,理论上他们都是存放资源的文件夹,那么他们到底有什...

  • A011-Raw资源

    前面的笔者介绍过了assets资源,这节课介绍的是在res目录下的raw资源,路径为res/raw。处理asset...

  • Android res/raw和assets目录的异同

    如题,相同点:放在这两个目录中的文件都不会被打包编译成二进制,会原封不动放入APK中,如一些声音文件,数据库文件等...

  • assets与res/raw资源目录的区别

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

网友评论

      本文标题:assets目录和res/raw目录的区别

      本文链接:https://www.haomeiwen.com/subject/bkumpxtx.html