`

Android的 assets和raw

 
阅读更多

    Asset和raw都是资源文件夹,比如可以放置数据库文件,音乐文件等等,这些文件在生成APK的时候不会被转换成二进制文件。

Asset和raw的区别:

    一、Assets和res在同一个目录,但是raw在res目录下,并且只有Assets才支持建立子目录。

    二、raw中的文件会被映射到R文件中,访问的时候直接使用资源ID即R.raw.*,而assets文件夹下的文件不会被映射到R.Java中,访问的时候需要使用AssetManager类;

     assets:   InputStream assets = getAssets().open("xxxx");
     raw:          InputStream raw = getResources().openRawResource(R.raw.xxxx)

现在给出具体代码显示他们的区别:

 

复制Assets目录的数据库文件music.db到手机的data目录

	private void initSQ() {
		String DB_PATH = "/data/data/com.yuzhiyun.perfectmusic/databases/";
		String DB_NAME = "music.db";

		if ((new File(DB_PATH,DB_NAME).exists()) == false)
		{
			File dir = new File(DB_PATH);
			if (!dir.exists())
			{
				dir.mkdir();
			}
			/**数据库复制到该目录*/
			try {
                                //看这里,获取输入流
				InputStream is = getAssets().open(DB_NAME);
				OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
				byte[] buffer = new byte[2014];
				int length;

				while ((length = is.read(buffer)) > 0)
				{
					os.write(buffer,0,length);
				}
				os.flush();
				os.close();
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

 

复制raw中文件到手机的data目录

	if ((new File(SONGS_PATH,SONGS_NAME).exists()) == false)
	{
		File dir = new File(SONGS_PATH);
		if (!dir.exists())
		{
			dir.mkdir();
		}
		/**歌曲复制到改目录*/
		try {
                        //看这里,获取输入流
			InputStream is = this.getResources().openRawResource(R.raw.a);
			FileOutputStream  os = new FileOutputStream(SONGS_PATH + SONGS_NAME);
			byte[] buffer = new byte[2014];
			int length;

			while ((length = is.read(buffer)) > 0)
			{
				os.write(buffer,0,length);
			}
			os.flush();
			os.close();
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
			

        疑问:

                  Assets目录看起来功能比raw多,那为什么还需要raw,Android干嘛不直接丢弃掉它。

         解答:

                  raw文件夹下有ID的资源文件在Android XML文件中也可以@raw/的形式引用到它(虽然我暂时没有这样用过)。在Android中,使用ID是访问一个文件最快捷的方式(为什么?我只是听人家讲的),同时,当存在子目录时候,在Assets目录下还需要一个字符串路径来获取这个目录下的文件,访问的速度会更慢。

 

        但是最后我还是要提出一个疑问,希望看到的同学帮忙回答一下,数据库db文件到底是放assets目录好还是放raw目录好??

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics