- SharedPreferences: 以Map形式存放简单的配置参数;
- ContentProvider: 将应用的私有数据提供给其他应用使用;
- 文件存储:以IO流形式存放,可分为手机内部和手机外部(SD卡等)存储,可存放较大数据;
- SQLite:轻量级、跨平台数据库,将所有数据都存放在手机上的单一文件内,占用内存小。
不用申请权限,卸载应用会跟着删除;用户无法查看该目录,除非进行root。该路径是APP私有路径,其他应用无法访问。
需要申请文件权限,注意Andorid权限申请权限兼容问题,判断SD卡挂载情况。用户可以删除,其他应用申请权限之后可以访问。
目录:/data
获取方法:Environment.getDataDirectory()
目录:/data/app/
获取方法:
val appInfo = context.packageManager.getApplicationInfo(packageName, 0)
val path = appInfo.sourceDir目录:/data/app/xxx/$packageName-xxx/lib/arm64
获取方法:
val app = context.packageManager.getApplicationInfo(packageName, 0)
app.nativeLibraryDir目录:/data/user/0/$packageName/
获取方法: Context.dataDir
用途:主要用于存储应用使用过程中产生的缓存数据。
目录:/data/user/0/$packageName/cache/
获取方法:context.cacheDir
目录:/data/user/0/$packageName/databases/
获取方法:context.getDatabasePath('user.db')
用途:主要用于存储配置文件、敏感数据等。
目录:/data/user/0/$packageName/files/
获取方法:context.fileDir
目录:/data/user/0/$packageName/shared_prefs/
获取方法:一般不会直接编辑里面的文件,存放的是一些数据量较小的键值对。
读方法:
val sharedPreferences = context.getSharedPreferences("文件名", Context.MODE_PRIVATE)
val value = sharedPreferences.getBoolean("key", false)写方法:
val sharedPreferences = context.getSharedPreferences("文件名", Context.MODE_PRIVATE)
sharedPreferences.putBoolean("key", false).apply()其中权限包括:
- Context.MODE_PRIVATE:只能被本应用读写
- Context.MODE_WORLD_READABLE:能被其他应用读,不能写
- Context.MODE_WORLD_WRITEABLE:能被其他应用写,但建议使用,可能会导致应用不安全
目录:/storage/emulated/0/
获取方法:
// 先判断是否挂载了SD卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
val path = Environment.getExternalStorageDirectory()
}目录:
// 机身存储的外部存储路径
/storage/emulated/0/Android/data/$packageName/files/mounted
// SD卡的存储,也属于外部路径
/storage/B3E4-1711/Android/data/packname/files/mounted
获取方法:
val files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
for(File file: files){
Log.e("main", file);
}参考: