数据存储:
SharedPreferences共享参数
SharedPreferences是Android系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持String、int、long、float、boolean等
基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。
SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名,上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家积分等)。
当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。
常用的方法:
Context.getSharedPreferences(String, int mode)
Context.MODE_PRIVATE: 指定该SharedPreferences的数据只能被本应用程序读、写
Context.MODE_APPEND:新内容追加到原内容后
Context.MODE_WORLD_READABLE: 指定 SharedPreferences数据能被其他应用程序读,但是不支持写---过时
Context.MODE_WORLD_WRITEABLE: 指定 SharedPreferences数据能被其他应用程序读、写会覆盖原数据---过时
可以使用"+"连接这些权限
contains(String key)
Context.getSharedPreferences(String, int mode)
Context.MODE_PRIVATE: 指定该SharedPreferences的数据只能被本应用程序读、写
Context.MODE_APPEND:新内容追加到原内容后
Context.MODE_WORLD_READABLE: 指定 SharedPreferences数据能被其他应用程序读,但是不支持写---过时
Context.MODE_WORLD_WRITEABLE: 指定 SharedPreferences数据能被其他应用程序读、写会覆盖原数据---过时
可以使用"+"连接这些权限
contains(String key)
Map<String,?> getAll()
getString(String key, String defValue)
SharedPreferences.Editor edit()
putString(String key, String value)
putStringSet(String key, Set<String> values)
putBoolean(String key, boolean value)
clear()
commit() 编辑完数据之后必须提交
Map<String,?> getAll()
getString(String key, String defValue)
SharedPreferences.Editor edit()
putString(String key, String value)
putStringSet(String key, Set<String> values)
putBoolean(String key, boolean value)
clear()
commit() 编辑完数据之后必须提交
1、获取SharedPreferences对象
2、调用edit()方法获取SharedPreferences.Editor
使用SharedPreferences的步骤
1、获取SharedPreferences对象
2、调用edit()方法获取SharedPreferences.Editor
3、通过SharedPreferences.Editor接口提供的put()方法对SharedPreferences进行更新
4、调用SharedPreferences.Editor的commit()方法,将更新提交到SharedPreferences中
3、通过SharedPreferences.Editor接口提供的put()方法对SharedPreferences进行更新
4、调用SharedPreferences.Editor的commit()方法,将更新提交到SharedPreferences中
文件存储路径:
/data/data/{appPackageName}/files/{filename}
扩展储存:
External Storage外部存储:
1.外部存储不见得总是可用的,例如:SDCard会被移除;
2.外部存储是全局可见的(可读的),存放到外部存储中的文件可以被当前设备中的所有能够操作该文件的app访问;
3.为了更好的管理外部存储,安卓系统进行了更细致的划分: 可划分为公共的外部存储和私有的外部存储
当app程序卸载时,私有外部存储中的文件会随着app的移除而被移除,而公共的外部存储则不移除;
4.如果当前的文件需要分享给手持设备中的其他app访问,或者是文件的安全性能不做具体要求时, 可以存储到公共路径下.
1.获取sdcard状态: String Environment.getExternalStorageState():
Environment.MEDIA_MOUNTED 介质已加载完
Environment.MEDIA_MOUNTED_READ_ONLY 介质已加载完,但是只读状态
Environment.MEDIA_CHECKING 正在检测介质
Environment.MEDIA_UNKNOWN 介质未知
Environment.MEDIA_UNMOUNTED 介质已卸载
获取公共目录: Environment.getExternalStoragePublicDirectory(String type)
Environment.DIRECTORY_MOVIES
Environment.DIRECTORY_MUSIC
Environment.DIRECTORY_DOCUMENTS
Environment.DIRECTORY_DOWNLOADS
Environment.DIRECTORY_PICTURES
Environment.DIRECTORY_RINGTONES
获取根目录:Environment.getExternalStorageDirectory()
获取下载缓存目录:Environment.getDownloadCacheDirectory()
读写SD卡的步骤:
先判断手机是否有sd卡:Environment.getExternalStorageState()
获取sdcard的路径:Environment.getExternalStorageDirectory()
此外还可以获取SDCard可用磁盘空间的大小(借助StatFs类来实现)
获取SDcard总大小
// StatFs用来计算文件系统空间大小的一个类.
// 这个类是对Unix中的statvfs()这个方法的包装类.
StatFs stat = new StatFs(getSDCardPath());
// 得到块的数量
// int blockCount = stat.getBlockCount();
// 得到每块的大小
// int blockSize = stat.getBlockSize();
// return blockCount*blockSize/1024/1024;
long blockCountLong = stat.getBlockCountLong();
long blockSizeLong = stat.getBlockSizeLong();
return blockCountLong * blockSizeLong / 1024 / 1024;
获取可用的Sdcard的存储大小
StatFs stat = new StatFs(getSDCardPath());
// 可用的块数
long availableBlocksLong = stat.getAvailableBlocksLong();
// 每块的大小
long blockSizeLong = stat.getBlockSizeLong();
return availableBlocksLong * blockSizeLong / 1024 / 1024;
清单文件中设置读写sdcard的权限
执行读写操作(基本IO流操作)
相关权限
读权限:android.permission.READ_EXTERNAL_STOARAGE
读写权限:android.permission.WRITE_EXTERNAL_STOARAGE