频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android Preference存储、res/raw、asset、openFileOutput、sdcard存储、Cache详解
2013-12-25 11:22:49         来源:Apple_hsp的专栏  
收藏   我要投稿

*res/raw、assets、其它存储的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

2.两者都是只读,是不能存储数据的目录。

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

3.raw、assets不可以写操作,只是其它可以执行写操作。

4.openFileOutput是存储在data/data/应用/file目录存储,与res/raw、assets区别是可以执行写操作,与sdcard存储、Cache区别是应用自己存储,非root系统无法访问此文件。

5.sdcard是存储外置空间目录存储,与res/raw、assets区别是可以执行写操作,所有应用都可以访问此目录。

6.Cache是存储在自己cache目录下面,当系统空间不足,系统会清除cache存储数据,区别就是这里面数据不是持久存储。

其实 apk文件就是一个压缩包,通过把后缀名字 ××.apk --> **.rar 可以看到打包好的apk应用的目录结构,其中assets就是打包前的assets资源目录,raw目录没有发现?打开/res/ 目录及就发现,就在那里!这可能就是raw/assets的区别的根源吧(android 资源管理之 Asset/raw 1 https://www.cnblogs.com/yaozhongxiao/archive/2013/04/21/3034260.html )

\

\

  从上面对比apk目录结构和应用安装好之后在应用的私有目录存在的文件信息,我们发现lib已经存在于应用的私有目录下面,那assets去哪里了呢?

  如果,我们仔细观察下,就可以发现,打包成apk并在手机上安装之后,该应用在手机上会存在如下几个地发,

  1)××.apk             文件放在了/data/app/目录下
  2)/data/system/packages.xml  中增加了条记录
  3)/data/data/packagename/,  下增加了个apk使用到的私有数据

  assets是不是偷懒了,assets还存在/data/app/××.apk里面,没有到私有目录下面呢? 是的,就是这样

3.读取raw文件方法如下,读文件为输入流数据。

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

4.读取assets下的文件资源,先通过获取AssetManager管理器,然后打开指定文件名。

[java] view plaincopy
  1. AssetManager am = null;
  2. am = getAssets();
  3. InputStream is = am.open("filename");

    5.Preference文件存储详解如下:

    Preference(配置)提供了一种轻量级的数据存取方法,主要应用于数据比较少的配置信息。它以“key-value”(是一个Map)对的方式将数据保存在一个XML配置文件中,例如,手机的开机问候语,可以将其以Preference方式来进行配置。也可以保存一些用户个性化设置的字体、颜色、位置等参数信息.

    使用到的接口:

    SharedPreferences接口和SharedPreferences.Editor接口,它们都是来自于andorid.content包。

    ①SharedPreferences接口提供保存数据的方法

    我们可以调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:

    • MODE_PRIVATE(私有)
    • MODE_WORLD_READABLE(可读)
    • MODE_WORLD_WRITEABLE(可写)

      /**
       * SharedPreferences管理类
       * */
      public class SharedPreferencesMgr {
      
      	private static Context context;
      	private static SharedPreferences sPrefs ;
      	
      	private SharedPreferencesMgr(Context context,String fileName)
      	{
      		this.context=context;
      		//初始化一个SharedPreferences对象,可以读写。
      		sPrefs= context.getSharedPreferences(
      				 fileName, Context.MODE_WORLD_READABLE );
      	}
      
      	public static void init(Context context,String fileName)
      	{
      		new SharedPreferencesMgr(context,fileName);
      	}
      	public  static String fileName ;
      	
      	/**
      	 * 从Preferences缓存得到一个整形
      	 * @param key
      	 * @param defaultValue
      	 * @return
      	 */
      	public static int getInt(String key,int defaultValue)
      	{
      		return sPrefs.getInt(key, defaultValue);
      	}
      	/**
      	 * 保存一个整形到Preferences中
      	 * @param key
      	 * @param value
      	 */
      	public static void setInt(String key,int value) {
      		sPrefs.edit().putInt(key, value).commit();
      	}
      	public static boolean getBoolean(String key,boolean defaultValue)
      	{
      		return sPrefs.getBoolean(key, defaultValue);
      	}
      	public static void setBoolean(String key,boolean value) {
      		sPrefs.edit().putBoolean(key, value).commit();
      	}
      	
      	public static String getString(String key,String defaultValue)
      	{
      		if(sPrefs ==null)
      			return null;
      		return sPrefs.getString(key, defaultValue);
      	}
      
      	public static void setString(String key,String value) {
      		if(sPrefs ==null)
      			return ;
      		sPrefs.edit().putString(key, value).commit();
      	}
      }


      *可写目录Preference、File、sdcard、cache详解:

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:android 获取ip地址和mac地址的多种方式
下一篇:android应用程序的安装与卸载
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站