
Android本地数据存储:SharedPreferences, ExternalStorage, InternalStorag...
1.18MB |
更新于2024-08-31
| 132 浏览量 | 6 评论 | 举报
收藏
"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适用于小量配置信息,外部存储适用于大文件,内部存储则用于私密数据。在实际开发中,理解并正确使用这些存储机制对于优化用户体验至关重要。
相关推荐



















资源评论

狼You
2025.05.25
通过案例演示,文章深入浅出地介绍了存储技术。🐱

UEgood雪姐姐
2025.05.21
适合初学者了解Android数据存储的基本知识。

shashashalalala
2025.05.12
实践与理论结合,学习Android数据管理的有效途径。

耄先森吖
2025.03.11
内容涉及SharedPreferences和存储权限管理,实用性强。😂

陈熙昊
2025.01.13
这篇文章对Android本地存储方法做了详细讲解,适合开发新手学习。

小米智能生活
2024.12.31
涵盖外部存储和内部存储的操作,知识全面。

weixin_38623272
- 粉丝: 5
最新资源
- MyIP扩展:Chrome插件显示外部IP与地理位置
- DocMgr: Laravel框架下的公文管理系统开发
- 高基数特征的规范化目标编码超越传统方法研究
- Chrome扩展程序实现虚拟主机访问无需DNS重定向
- 芝加哥犯罪分析与可视化开源仪表板
- TDOS-crx插件:区块链DAPP事务处理专家
- Chrome扩展OSF Preprints Preview:预印本样式快速预览工具
- JSON-formator-crx:JSON数据格式化插件
- WebAssembly中的GhostScript插件:直接在Chrome查看PostScript文件
- 检测OAuth 2.0隐式流程的安全隐患-crx插件
- GitHuber-CRX插件:剖析开发者使用语言比例
- CFCA CryptoKit.COFCO Chrome扩展实现证书验证功能
- Chrome扩展:SSH Agent实现及其使用指南
- LaravelExam:万泰科技服务控制框架分析
- 探索MAN Plus-crx:浏览器中的Matrix钱包扩展
- Python实践:掌握基本原理与问题解决技巧
- jQuery Audit-crx插件:审查与调试jQuery事件和数据
- 明文显示密码的Input Type Text-crx扩展功能
- Brazzers扩展破解:无限场景预览与Torrentz2下载链接
- OlderFlow-crx插件:Q&A网站搜索简化神器
- Source Replacer-crx插件: 替换网页资源轻松调试
- OlleGunnemyr的个人技术博客解析
- Scratch转JavaScript学习工具:CRX插件介绍
- Gradfolio - 个人网站和投资组合的快速响应Jekyll主题