Android系统中内部存储和外部存储(公有目录、私有目录、缓存目录)详解

首先,明确一个概念,Android内部存储和外部存储并不是所谓的手机自带内存是内部存储,SD卡是外部存储。Android对内部存储和外部存储不是在物理上区分的,而是在逻辑上区分的。

一.概念

内部存储是指系统内部存储空间,在逻辑上用目录来区分的话就是data目录下的文件夹
除此之外data目录下有app目录存放系统下载的apk信息,有data目录存放各种文件
例如:
sharedPreferenced存储的文件在 /data/data//shared_prefs/目录下。
Sqlite存储的文件在 /data/data//database/目录下。
这些目录使用Androidstuid中的Device File Explorer可以查看

外部存储就简单多了

  • 1.手机厂商自带存储,也就是常说的 16GB、64GB等
  • 2.SD卡

这些都是外部存储

二.获取可操作内部存储目录(随着用户删除app而删除)

getCacheDir().getPath():内部缓存目录
/data/user/0/packname/cache/      //7.0以上
/data/data/packname/cache/

getFilesDir().getPath():内部文件目录
/data/user/0/packname/files/
/data/data/packname/files/

shared_prefs和database两个文件夹有sharedPreferenced和Sqlite这些专门工具去操作。

注:data/data/…和data/user/0/… 区别是后者区分用户,不过这不重要

三.获取可操作外部存储目录

外部存储分为外部公共目录、外部私有目录、缓存目录

1、外部九大公共目录:
Environment.getExternalStoragePublicDirectory(context,type);
/storage/emulate/0/....

有九种type,分别对应不同的目录,如下
DIRECTORY_MUSIC:音乐类型    /storage/emulate/0/music
DIRECTORY_PICTURES:图片类型
DIRECTORY_MOVIES:电影类型
DIRECTORY_DCIM:照片类型,相机拍摄的照片视频都在这个目录(digital camera in memory) 
DIRECTORY_DOWNLOADS:下载文件类型   /storage/emulate/0/downloads
DIRECTORY_DOCUMENTS:文档类型
DIRECTORY_RINGTONES:铃声类型
DIRECTORY_ALARMS:闹钟提示音类型
DIRECTORY_NOTIFICATIONS:通知提示音类型
2、外部私有目录 (随着用户删除app而删除)
getExternalFilesDir(type)

/storage/emulated/0/Android/data/packagename/files/
3、外部缓存目录(随着用户删除app而删除)
getExternalCacheDir()

/storage/emulated/0/Android/data/packname/cache/
4、外部根目录
Environment.getExternalStorageDirectory()
/storage/emulated/0
路径方法名所属
/data/data/<包名>/filesgetFilesDir()内部
/data/data/<包名>/cachegetCacheDir()内部
/data/data/<包名>/app_getDir()内部
/storage/emulated/0Environment.getExternalStorageDirectory()外部根目录
/storage/emulated/0/Environment.getExternalStoragePublicDirectory(type)外部九大公有目录
/storage/emulated/0/Android/data/<包名>/files/getExternalFilesDir(type)外部私有目录
/storage/emulated/0/Android/data/<包名>/cachegetExternalCacheDir()外部缓存目录

注:无论外部内部,只要路径中有包名,就是私有的,用户需要root才能访问。获取路径的方法均是Context调用的,且随着用户删除app而销毁,没有包名的路径均是Environment调用的。

注:
FileProvider的paths与对应目录解析:
root-path 对应DEVICE_ROOT,也就是File DEVICE_ROOT = new File("/"),即根目录,一般不需要配置。
files-path对应 getFilesDir() 获取到的内部文件目录。
cache-path对应 getCacheDir() 获取到的内部缓存目录。
external-path对应 Environment.getExternalStorageDirectory() 指向的外部根目录。
external-files-path对应 ContextCompat.getExternalFilesDirs() 获取到的外部私有目录。
external-cache-path对应 ContextCompat.getExternalCacheDirs() 获取到的外部缓存目录。

原文链接:https://www.it610.com/article/1291552069525774336.htm

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值