Android本地数据存储:SharedPreferences, ExternalStorage, InternalStorag...
31 浏览量
更新于2024-08-31
收藏 1.18MB PDF 举报
"Android应用程序在运行过程中经常需要存储各种数据,如用户偏好设置、配置信息等。本文将详细介绍Android中的三种本地数据存储方式:SharedPreferences、ExternalStorage(外部存储)和InternalStorage(内部存储)。"
一、SharedPreferences
SharedPreferences是Android提供的一种轻量级的数据存储方案,适合存储少量的键值对数据,如用户设置。它的特点是存储的数据量小,但保存的时间持久,即使应用卸载后,数据仍然可以保留。
1、特点:
- 存储量小:适用于存储简单的配置信息,如布尔值、整型、浮点型、字符串等。
- 时间持久:数据会存储在设备的私有文件中,除非手动清除,否则数据会一直存在。
2、SharedPreferences操作模式:
- MODE_PRIVATE:默认模式,只有当前应用能访问。
- MODE_WORLD_READABLE:其他应用也能读取,但不能写入。
- MODE_WORLD_WRITEABLE:其他应用既能读取也能写入。
3、SharedPreferences的使用:
通常通过`getSharedPreferences()`方法获取`SharedPreferences`对象,然后使用`edit()`创建一个`SharedPreferences.Editor`用于编辑,最后调用`apply()`或`commit()`来提交修改。
```java
SharedPreferences preferences = getSharedPreferences("MyPreferences", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", "value");
editor.apply(); // 或 editor.commit();
```
二、外部存储ExternalStorage
外部存储是Android设备上的公共存储区域,可以用来存储用户可访问的文件,如音频、图片、视频等大文件。
1、概念:
- 外部存储是设备上可插入SD卡或内置的外部存储空间。
- 对于6.0及以上版本,需要动态申请写入外部存储的权限。
2、具体操作:
可以使用`Environment.getExternalStorageDirectory()`获取根目录,然后创建文件或目录进行读写。
```java
File externalFile = new File(Environment.getExternalStorageDirectory(), "test.txt");
FileOutputStream fos = new FileOutputStream(externalFile);
fos.write("Hello, External Storage!".getBytes());
fos.close();
```
3、动态权限(6.0以上):
需在AndroidManifest.xml中声明权限,并在运行时请求权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
```
三、内部存储InternalStorage
内部存储是每个应用的私有空间,只有该应用可以访问,即使设备被root,其他应用也无法直接访问。
1、概念:
- 内部存储是应用专属的存储区域,用于存储私密或敏感数据。
- 应用卸载时,内部存储的数据会被自动清理。
2、获取内存存储的目录:
使用`getFilesDir()`获取内部存储的文件目录,`getCacheDir()`获取缓存目录。
3、代码演示:
创建、读取内部存储文件:
```java
File internalFile = new File(getFilesDir(), "test.txt");
FileOutputStream fos = new FileOutputStream(internalFile);
fos.write("Hello, Internal Storage!".getBytes());
fos.close();
FileInputStream fis = new FileInputStream(internalFile);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, length));
}
fis.close();
```
四、开发过程中的异常处理
1、FileNotFound异常:
当尝试访问不存在的文件时,可能会抛出此异常,需要进行适当的错误处理。
2、DDMS中data、sdcard目录无法展开:
在Android Studio的设备监控器(DDMS)中,可能由于权限问题无法直接查看data和sdcard目录,可通过Logcat查看日志或使用adb命令行工具进行文件操作。
总结,Android提供了多种本地数据存储方式,开发者可以根据需求选择合适的方式。SharedPreferences适用于小量配置信息,外部存储适用于大文件,内部存储则用于私密数据。在实际开发中,理解并正确使用这些存储机制对于优化用户体验至关重要。
2020-12-10 上传
142 浏览量
2023-06-01 上传
2023-05-26 上传
2023-06-10 上传
2023-06-03 上传
2023-06-10 上传
2021-10-11 上传
2023-06-08 上传
weixin_38623272
- 粉丝: 5
- 资源: 853
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明