概述

Android的数据保存可以分为3种情况

  1. 保存在preference (小的键值对集合)
  2. 保存在文件 (流式顺序数据,如图片文件,网络交换的数据等)
  3. 保存到数据库DB

保存在Perference

两种方法:

getSharedPerference() 多个shared perference文件

Context context = getActivity();SharedPreferences sharedPref = context.getSharedPreferences(        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

getPerference() 当activity只需要一个sp文件的时候,此时不需要文件名

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

读写 Perference

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);int defaultValue = getResources().getInteger(R.string.saved_high_score_default);long highScore = sharedPref.getInt(getString(R.string.saved_high_score), default); // default 是作为查找的key不存在的时候的返回值

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPref.edit();editor.putInt(getString(R.string.saved_high_score), newHighScore);editor.commit(); //注意:最后要commit()

保存的位置

也就是保存在Flie systen,通过 Flie 的读写Apis

而android中有两个文本存储区域,这是因为android大都有两个存储位置,一个是不可变的 *internal storage,而另外一部分是可拆卸的 external storage (虽然现在有一些的设备将 internal 和external都做成了不可拆卸),但是还是有逻辑区分的

以下是总结的internal和external的区别的联系

位置 可用性 访问性 卸载后 权限
internal 总是可用的 只能被自己的app访问 系统会清理app内所有的相关文件 无需权限
external 并不总是可用的(可能是外部sd卡) 可以被其他的app访问到 卸载后只删除external根目录下的相关文件? 要在mainfest里声明读写权限

internal 存储

// 这是在目录下创建一个文件File file = new File(context.getFilesDir(), filename);//这是通过outputstream写入String filename = "myfile";String string = "Hello world!";FileOutputStream outputStream;try {  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);  outputStream.write(string.getBytes());  outputStream.close();} catch (Exception e) {  e.printStackTrace();}//最后这个很重要,是如何缓存文件的,其实绝大多多数情况下我们都要用到缓存的,视频缓存,图片缓存等public File getTempFile(Context context, String url) {    File file;    try {        String fileName = Uri.parse(url).getLastPathSegment();        file = File.createTempFile(fileName, null, context.getCacheDir());    catch (IOException e) {        // Error while creating file    }    return file;}

external 存储

因为其可用性不一定,所以保存文件前一定要先进行可用性测试

//测试是否可读写public boolean isExternalStorageWritable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state)) {        return true;    }    return false;}/* Checks if external storage is available to at least read */public boolean isExternalStorageReadable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state) ||        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {        return true;    }    return false;}

存储为 public flie 卸载时不可删除

public File getAlbumStorageDir(String albumName) {    // Get the directory for the user's public pictures directory.    File file = new File(Environment.getExternalStoragePublicDirectory( //要通过这个方法获取file            Environment.DIRECTORY_PICTURES), albumName); //要制定类型    if (!file.mkdirs()) {        Log.e(LOG_TAG, "Directory not created");    }    return file;}

private file 在app卸载时刻删除

public File getAlbumStorageDir(Context context, String albumName) {    // Get the directory for the app's private pictures directory.    File file = new File(context.getExternalFilesDir(            Environment.DIRECTORY_PICTURES), albumName); //这里指定类型很重要,如果指定的不是picture而是miuce,那么久不会被视为picture对待    if (!file.mkdirs()) {        Log.e(LOG_TAG, "Directory not created");    }    return file;}

查找空间

如果没有足够空间就会发生 IOException,如果实现要知道 getFreeSpace() or getTotalSpace() 来判断是否有足够的空间来保存文件,返回的是可用空间大小,但是一般需要更多一些

删除文件

myFile.delete(); //删除文件myContext.deleteFile(fileName);//删除internal中的文件

Tips:

卸载时会删除

internal所有

external中的 private file

但是缓存中的文件一般需要手动删除

保存在数据库

因为本人并不是很熟悉 SQL,所以等了解了SQL后再回来看这部分

更多相关文章

  1. Android(安卓)Studio与Eclipse SDK无法更新解决方案
  2. Android--打包工具,100个渠道包只需要10秒钟
  3. Android(安卓)面试之常用开源库
  4. Android仿微信图片选择器(二)
  5. Cordova 3.x 源码分析(7) -- CordovaLib概要
  6. Android的eclipse插件adt无法启动“No target available”
  7. [Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的
  8. android工程gen目录中R.java包名是怎么确定
  9. 设置ubuntu Android(安卓)sdk JDK环境变量

随机推荐

  1. Android中visibility属性VISIBLE、INVISI
  2. Android链式方法显示Dialog
  3. 【Android(安卓)总结】缩写
  4. 14 Android(安卓)android 按钮效果的两种
  5. [置顶] androidの下拉菜单Spinner使用
  6. Android(安卓)实现部分文字高亮的三种方
  7. Android中如何判断是否联网
  8. 【Android-File】Android文件的读写
  9. Android(安卓)pthread mutex 实现分析
  10. android 渐变背景