特点:
适用场景:
操作步骤:
context.getFilesDir()
获取文件目录 FileOutputStream
写入文件 context.openFileInput()
读取文件 示例代码(Kotlin):
// 写入文件 val file = File(context.filesDir, "config.txt") file.writeText("key=value") // 读取文件 val content = context.openFileInput("config.txt").bufferedReader().use { it.readText() }
特点:
READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限 适用场景:
操作步骤:
getExternalFilesDir()
获取应用专属目录 MediaStore
操作媒体文件 示例代码(Kotlin):
// 申请权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_CODE) } // 写入文件到公有目录 val publicFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "image.jpg") publicFile.writeBytes(byteArray)
特点:
适用场景:
Room 示例代码(Kotlin):
// 定义实体 @Entity data class User( @PrimaryKey val id: Int, val name: String ) // 定义 DAO @Dao interface UserDao { @Insert suspend fun insert(user: User) @Query("SELECT FROM User") suspend fun getAllUsers(): List<User> } // 使用数据库 val db = Room.databaseBuilder(context, AppDatabase::class.java, "app_db").build() val users = db.userDao().getAllUsers()
特点:
适用场景:
示例代码(Kotlin):
// 写入数据 val prefs = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE) prefs.edit().putString("username", "JohnDoe").apply() // 读取数据 val username = prefs.getString("username", "default_user")
特点:
适用场景:
存储类型 | 数据类型 | 权限需求 | 生命周期 | 适用场景 |
---|---|---|---|---|
内部存储 | 任意文件 | 无 | 应用卸载即删 | 配置文件、临时缓存 |
外部存储 | 媒体文件、文档 | Android 6.0+动态权限 | 用户可手动清理 | 图片、视频、共享文件 |
SQLite/Room | 结构化数据 | 无 | 持久化 | 复杂数据、高频查询 |
SharedPreferences | 键值对(字符串/布尔等) | 无 | 应用卸载即删 | 用户偏好、简单配置 |
网络存储 | 任意数据(依赖API) | 互联网权限 | 依赖服务端策略 | 跨设备同步、大数据分析 |
解答:
SharedPreferences
解答:
Scoped Storage
。 getExternalFilesDir()
获取应用专属目录(无需权限)。 Storage Access Framework
(SAF)访问用户选定的文件。 Android/data/包名
)。