Android存储目录

Android大分为内部存储和外部存储

内部存储-Internal storage

除黑科技外,只能被我们app访问。
不需要存储权限。
卸载app后,系统会自动清理app存储的文件。

getCacheDir

路径:/data/data/应用包名/cache
getCacheDir()其对应着应用程序内的内部缓存,用来存储临时数据。因此在系统空间较少时有可能会被自动清除。
官方建议是,超过1MB的文件,建议存储到getExternalCacheDir()目录下

getFileDir

路径:data/data/应用包名/files

常见的内部存储中有这些目录

  • /data/app/
  • /data/data/包名/shared_prefs
  • /data/data/包名/cache
  • /data/data/包名/databases
  • /data/data/包名/files

外部存储-External storage

公共目录,适合存储不重要的文件,卸载app后文件仍然保留,大家都可以访问,因此也能被其他app访问,也是跨进程通信的一种方案。
私有目录,类似于内部存储,卸载app会删除。

公共目录

Environment.getExternalStorageDirectory()
路径:/storage/emulated/0
官方更建议app私有数据存放于Context.getExternalFilesDir目录下,其他的可以被分享的文件,可以放在getExternalStoragePublicDirectory(String)目录下
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()):
/storage/emulated/0/DCIM

类型:

1. DIRECTORY_MUSIC
音乐/storage/emulated/0/Music
2. DIRECTORY_PODCASTS
播客/storage/emulated/0/Podcasts
3. DIRECTORY_RINGTONES
来电铃声
4. DIRECTORY_ALARMS
闹钟/storage/emulated/0/Alarms
5. DIRECTORY_NOTIFICATIONS
通知/storage/emulated/0/Notifications
6. DIRECTORY_PICTURES
图片/storage/emulated/0/Pictures
7. DIRECTORY_MOVIES
电影/storage/emulated/0/Movies
8. DIRECTORY_DOWNLOADS
下载文件存储路径/storage/emulated/0/Download
9. DIRECTORY_DCIM
媒体文件/storage/emulated/0/DCIM
10. DIRECTORY_DOCUMENTS
文档/storage/emulated/0/Documents

我们通过Environment.getExternalStoragePublicDirectory()来获取这些目录

私有目录,无需权限

getExternalFilesDir(Environment.DIRECTORY_PICTURES)

/storage/emulated/0/Android/data/packagename/files/Pictures
获取/storage/emulated/0/Android/data/packagename/files目录 ->getExternalFilesDir(null)
扩展: getExternalFilesDir是手机中设置 → 应用 → 具体应用详情→ 清除数据 的操作对象

getExternalCacheDir

路径:/storage/sdcard/Android/data/应用包名/cache
getExternalCacheDir() 对应着应用程序内的外部缓存,同样是用来存储临时数据的。但是其由于脱离了应用管理,因此并不会在空间少时被自动清除。
扩展: getExternalCacheDir是手机中设置 → 应用 → 具体应用详情→ 清除缓存的操作对象

总结:
当我们需要存储一些私密性和安全性比较高的小数据,例如用户的账号密码等信息,我们可以存放在内部存储空间上;当我们需要存放一些能够被其他应用也能访问的数据,并且当应用被删除的时候,不希望数据被清除的时候,我们可以放到外部存储的公有目录下,但别忘了申请读写SD卡的权限哦;当我们需要存放一些应用的数据和缓存数据,希望有较好的隐私性和应用被删除的时候,对应的应用数据和缓存也被删除,这时候我们可以选择存放在外部存储的私有目录下。

参考:
https://www.jianshu.com/p/24d047ef641a

Android 系统中,App 的存储目录分为 **内部存储(Internal Storage)** 和 **外部存储(External Storage)**,不同目录的访问方式和用途有所不同。以下是详细的分类和说明: --- ## **1. 内部存储(Internal Storage)** - **路径**:`/data/data/<package_name>/` - **特点**: - **私有目录**,只有当前 App 可以访问(无需权限)。 - 卸载 App 时自动删除。 - **无需存储权限**(`READ_EXTERNAL_STORAGE` / `WRITE_EXTERNAL_STORAGE`)。 ### **主要子目录** | 目录 | 访问方式 | 用途 | |------|---------|------| | `files/` | `context.getFilesDir()` | 存放普通文件 | | `cache/` | `context.getCacheDir()` | 临时缓存(系统可能自动清理) | | `databases/` | `context.getDatabasePath("db_name")` | SQLite 数据库 | | `shared_prefs/` | `context.getSharedPreferences()` | SharedPreferences 存储 | **示例代码**: ```java File filesDir = context.getFilesDir(); // /data/data/<package>/files/ File cacheDir = context.getCacheDir(); // /data/data/<package>/cache/ File dbFile = context.getDatabasePath("my_db.db"); // /data/data/<package>/databases/my_db.db ``` --- ## **2. 外部存储(External Storage)** - **路径**:`/storage/emulated/0/`(模拟存储)或 `/sdcard/`(物理存储) - **特点**: - 所有 App 均可访问(需权限,Android 10+ 受限)。 - 卸载 App **不会自动删除**(除非放在 App 专属目录)。 - **需要存储权限**(Android 10+ 引入分区存储限制)。 ### **(1)App 专属外部存储(推荐)** | 目录 | 访问方式 | 特点 | |------|---------|------| | `Android/data/<package>/` | `context.getExternalFilesDir()` | 卸载时自动删除 | | `Android/media/<package>/` | `context.getExternalMediaDirs()` | 卸载时保留(用于媒体文件) | **示例代码**: ```java File extFilesDir = context.getExternalFilesDir(null); // /storage/emulated/0/Android/data/<package>/files/ File extCacheDir = context.getExternalCacheDir(); // /storage/emulated/0/Android/data/<package>/cache/ ``` ### **(2)公共外部存储(需权限,Android 10+ 受限)** | 目录 | 访问方式 | 用途 | |------|---------|------| | `Downloads/` | `Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)` | 下载文件 | | `DCIM/`, `Pictures/` | `Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)` | 照片 | | `Music/`, `Movies/` | 类似上述方法 | 多媒体 | **权限要求**: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` --- ## **3. Android 存储适配(版本差异)** | 版本 | 变化 | 适配方案 | |------|------|----------| | **Android 10 (API 29)** | 引入 **分区存储(Scoped Storage)** | 使用 `MediaStore` 或 App 专属目录 | | **Android 11 (API 30)** | 进一步限制访问公共目录 | 申请 `MANAGE_EXTERNAL_STORAGE` 权限(需用户手动授权) | | **Android 13 (API 33)** | 细化媒体权限(照片、视频、音频分开申请) | `READ_MEDIA_IMAGES` / `READ_MEDIA_VIDEO` | --- ## **总结** - **内部存储**:私有目录,无需权限,卸载自动清理。 - **外部存储**: - **App 专属目录**(`Android/data/`):推荐使用,卸载可清理。 - **公共目录**(如 `Downloads/`):需权限,Android 10+ 受限。 - **适配建议**: - 优先使用 `getExternalFilesDir()` 或 `MediaStore`。 - 避免直接访问 `/sdcard/` 路径。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值