Android本地数据存储:SharedPreferences, ExternalStorage, InternalStorag...

1 下载量 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适用于小量配置信息,外部存储适用于大文件,内部存储则用于私密数据。在实际开发中,理解并正确使用这些存储机制对于优化用户体验至关重要。