定义:

数据持久化指的是存储数据,android里有提供多种方式;

把数据存储到data目录

涉及API

获取Apk的数据存储路径:

File filesDir = this.getFilesDir();
Log.d(TAG, "filesdir: " + filesDir);
///data/user/0/com.example.activitydemo/files

获取Apk的缓存存储路径:

File cacheDir = this.getCacheDir();
Log.d(TAG, "cacheDir: " + cacheDir);
///data/user/0/com.example.activitydemo/cache

把数据存储到SD卡目录

涉及API

获取SD卡挂载状态:

String sdState = Environment.getExternalStorageState();
Log.d(TAG, "sdState: " + sdState);
//获取SD卡挂载状态:sdState: mounted

获取SD卡挂载目录:

File externalStorageDirectory = Environment.getExternalStorageDirectory();
Log.d(TAG, "getSdPath: " + externalStorageDirectory);
//获取SD卡目录:getSdPath: /storage/emulated/0

获取SD卡剩余空间:

long freeSpace = externalStorageDirectory.getFreeSpace();
Log.d(TAG, "freeSpace: " + freeSpace + "bytes");
//freeSpace: 10999836672bytes

可视化数据:(传入一个bytes,输出一个便于观察的单位格式的数据)

String sizeText = Formatter.formatFileSize(this,freeSpace);
Log.d(TAG, "sizeText: " + sizeText + "GB");
//sizeText: 10.24 GB

存储数据:

其中FileOutputStream(File file, boolean append),append代表是否追加;

if (Environment.MEDIA_MOUNTED.equals(sdState)){
    File externalStorageDirectory = Environment.getExternalStorageDirectory();
    Log.d(TAG, "getSdPath: " + externalStorageDirectory);
    //获取SD卡目录:getSdPath: /storage/emulated/0
    try {
        File file = new File(externalStorageDirectory,"info.text");
        if (! file.exists()) {
            file.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(file,true);
        fos.write("存数据到SD卡中\n".getBytes());
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

添加权限(否则会报错):

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

采用SharePreference保存偏好设置(比如Settings)

第一步:拿到这个SharePreference

mSharedPreferences = this.getSharedPreferences("switch_info",MODE_PRIVATE);

第二步:进入编辑模式

final SharedPreferences.Editor edit = mSharedPreferences.edit();

第三步:保存数据

edit.putBoolean("state",isChecked);

第四步:提交编辑器

edit.commit();

switcg_info.xml文件:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <boolean name="state" value="true" />
</map>

SharePreference存储也属于内部存储,在data/data/包名/shared_prefs,以xml文件保存一起来;内容保存都是以键值对的方式来进行保存;(Settings大部分都是以这个方式进行存储);

数据存储之数据库Sqlite

参考:

视频学习-【android基础系列P3】Android开发数据持久化存储-推荐1.5倍速

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐