当前位置: 首页 > news >正文

Android 本地存储路径说明

一、背景

作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过:

File sdCard = Environment.getExternalStorageDirectory();

获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,SD卡根目录会迅速变得杂乱不堪。并且在API 6.0之后,根目录文件存储是需要用户授权的,就算你在AndroidManifest.xml中配置了存储权限,用户不授权也是写不进去了

SD卡读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

其实,Google已经提供了最佳的外部存储方案,那就是统一路径为:

/Android/data/< package name >/files/… (该路径通常挂载在/mnt/sdcard/下)

外部存储路径调用方法是: context.getExternalFilesDir(dir).getAbsolutePath()   //通过context调用,

参数dir为自自定义文件夹.这个方法获得的文件存储路径适用于6.0以后系统,主要AndroidManifest.xml配置读写权限了,就不需要用户再授权了.

内部存储路径调用方法是:context().getCacheDir().getAbsolutePath() //通过context调用

二、本地存储路径常用方法介绍

1. getCacheDir()

  • 路径/data/data/<package_name>/cache/

  • 存储类型:内部存储(应用私有目录)。

  • 特点

    • 无需权限,应用卸载时自动删除。

    • 适合存放临时缓存文件(如图片缓存)。

    • 系统可能在存储不足时清理此目录(但依赖系统实现,不保证及时性)。

  • 示例

    File cacheDir = context.getCacheDir();


2. getFilesDir()

  • 路径/data/data/<package_name>/files/

  • 存储类型:内部存储(应用私有目录)。

  • 特点

    • 无需权限,应用卸载时自动删除。

    • 适合存放长期使用的私有文件(如用户配置、数据库文件)。

    • 系统不会自动清理,需开发者管理。

  • 示例

    File filesDir = context.getFilesDir();


3. getExternalFilesDir(String type)

  • 路径/Android/data/<package_name>/files/<type>/
    (例如 Environment.DIRECTORY_DOWNLOADS 指定子目录)

  • 存储类型:外部存储(应用私有目录)。

  • 特点

    • 从 Android 4.4(API 19)开始无需权限;但若访问其他应用的目录或公共目录(如 DCIM)仍需权限。

    • 应用卸载时自动删除。

    • 适合存放媒体文件等较大数据(如音视频、文档)。

    • 用户可通过文件管理器直接访问(需注意隐私问题)。

  • 示例

  • File externalFilesDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);


4. getExternalCacheDir()

  • 路径/Android/data/<package_name>/cache/

  • 存储类型:外部存储(应用私有目录)。

  • 特点

    • 与 getExternalFilesDir() 类似,但专用于缓存文件。

    • 系统或用户可能手动清理此目录。

    • 适合存放临时外部缓存(如下载的临时文件)。

  • 示例

    File externalCacheDir = context.getExternalCacheDir();

5. Environment.getExternalStorageDirectory()

  • 已废弃 (API 29+),建议使用 Context#getExternalFilesDir(String) 或其他存储访问框架

  • 返回共享的外部存储根目录 (如 /storage/emulated/0)

  • 需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限

  • 存储在此处的文件对所有应用可见,用户也可以通过文件管理器访问

  • 应用卸载时文件不会被自动删除

三、路径说明和对比

getCacheDir():/data/data/你的应用的包名/cache
getFilesDir():/data/data/你的应用的包名/files
getExternalFilesDir():SDCard/Android/data/你的应用的包名/files/
getExternalCacheDir():SDCard/Android/data/你的应用包名/cache/


从上文每个方法获取的路径中可以看出,getCacheDir()和getFilesDir()是获取手机自带的存储空间中的当前包文件的路径 ;
getExternalFilesDir()和getExternalCacheDir()是获取手机中SD卡的存储控件中的当前包文件的路径。

关键区别总结

区别方法存储位置是否需要权限卸载是否删除系统清理行为适用场景
external storage
外部存储
Environment.getExternalStorageDirectory()SD卡根目录:/storage/emulated/0已废弃,不建议再使用,推荐使用getExternalFilesDir代替
context.getExternalFilesDir(dir)路径:/storage/emulated/0/Android/data/<package_name>/files/...否(API 19+)较大的媒体或文档文件
context.getExternalCacheDir()路径:/storage/emulated/0/Android/data/<package_name>/cache/...否(API 19+)可能(用户/系统)外部临时缓存文件
internal storage
内部存储
context.getFilesDir()路径:/data/data/<package_name>/files适合存储应用长期使用的私有文件
context.getCacheDir()路径:/data/data/<package_name>/cache可能(低存储时)内部临时缓存文件

 注:/data/data/等同于/data/user/0

四、注意事项

1、权限问题

访问外部存储的公共目录(如相册)需 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 权限(Android 10+ 分区存储限制)。

私有目录(getExternalFilesDir/getExternalCacheDir)在 API 19+ 无需权限。

2、兼容性:

使用前检查外部存储是否可用:
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

3、存储选择建议:

小文件或敏感数据优先用内部存储(getFilesDir)。

大文件或用户需访问的文件用外部私有目录(getExternalFilesDir)。

4、清理责任:

缓存目录(getCacheDir/getExternalCacheDir)应定期清理,避免占用过多空间。

相关文章:

  • Android基础回顾】六:安卓显示机制Surface 、 SurfaceFlinger、Choreographer
  • 低功耗高安全:蓝牙模块在安防系统中的应用方案
  • 前端常见错误
  • 高通camx Node相关
  • IP证书与 域名证书有什么区别?
  • Flyway
  • python条件语句及input函数的使用与理解(附实战代码)
  • “产业大脑”核心功能全景解析
  • 大模型面试题总结
  • 【高等数学】函数项级数
  • Linux目录结构
  • OA系统与ERP管理系统的核心差异与协同价值
  • 小程序引入deepseek
  • 青岛国瑞数据采集网关软件平台:工业互联的智能基石——安全、高效、开放,驱动企业数字化转型
  • ubuntu 端口复用
  • 在 Spring Boot 中使用 JSP
  • 深度学习姿态估计实战:基于ONNX Runtime的YOLOv8 Pose部署全解析
  • [蓝桥杯]三体攻击
  • 上门预约行业技术方案全解析:小程序、App还是H5?如何选择?
  • P10909 [蓝桥杯 2024 国 B] 立定跳远
  • 选一个网站做seo/成功的营销案例及分析
  • 电子商务网站规划原则/线上平台推广方式
  • 会务网站建设/湖北网站推广
  • 自己可以学做网站吗/小红书关键词排名优化
  • 哪个网站做首饰批发好/seo综合查询 站长工具
  • wordpress建立网站/bt种子搜索神器