内存,内部存储,外部存储,概念的区分
内存(Memory/RAM):
RAM 是一种临时的数据存储器,当断电后数据就会消失,并且读取和写入的速度非常快。通常我们所说的手机的运行内存就是它了(关于更专业的解释可以交给度娘)。
内部存储和外部存储:
/data
目录就是就是手机的内部存储:
storage、mnt或者sdcard目录为外部存储。(准确一点应为/mnt/sdcard
,/storage/emulated/0
和/sdcard
)
从手机层面来看看:
开始的时候内部存储和外部存储是分开的,之前都是可以插sd卡的,外部和内部就很好区分,外部存储就是存在sd卡,内部就是存在手机里
现在的手机都是大多都是一体机,不支持sd卡
存储路径
一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。
1.内部存储
Environment.getDataDirectory(); // /data 根目录
getCacheDir(); // /data/user/0/cn.pc.filepath/cache 应用缓存目录
getFilesDir(); // /data/user/0/cn.pc.filepath/files 应用文件目录
getFileStreamPath(""); // /data/user/0/cn.pc.filepath/files 返回以name为文件名的子文件目录,若name为空,则返回文件根目录。
getFileStreamPath("test"); // /data/user/0/cn.pc.filepath/files/test
2.外部存储
2.1 根目录( r o o t D i r ) : / s t o r a g e / e m u l a t e d / 0 ( 不 一 定 , 不 同 设 备 可 能 不 同 ) , 通 过 E n v i r o n m e n t . g e t E x t e r n a l S t o r a g e D i r e c t o r y ( ) 获 取 。 2.2 应 用 程 序 目 录 ( rootDir):/storage/emulated/0(不一定,不同设备可能不同),通过 Environment.getExternalStorageDirectory() 获取。 2.2 应用程序目录( rootDir):/storage/emulated/0(不一定,不同设备可能不同),通过Environment.getExternalStorageDirectory()获取。2.2应用程序目录(applicationDir): r o o t D i r / A n d o r i d / d a t a / 包 名 应 用 缓 存 目 录 : rootDir/Andorid/data/包名 应用缓存目录: rootDir/Andorid/data/包名应用缓存目录:applicationDir/cache,通过Context.getExternalCacheDir()获取。
应用文件目录:$applicationDir/files,通过Context.getExternalFilesDir(String type),type为空字符串时获取。type系统给我们提供了很多常用的类型,比如图片和下载等等:
public static String DIRECTORY_MUSIC = "Music";
public static String DIRECTORY_ALARMS = "Alarms";
public static String DIRECTORY_NOTIFICATIONS = "Notifications";
public static String DIRECTORY_PICTURES = "Pictures";
public static String DIRECTORY_MOVIES = "Movies";
public static String DIRECTORY_DOWNLOADS = "Download";
public static String DIRECTORY_DCIM = "DCIM";
public static String DIRECTORY_DOCUMENTS = "Documents";
假设我们的应用程序包名为com.learn.test,路径如下:
Environment.getExternalStorageDirectory(): /storage/emulated/0
Context.getExternalCacheDir(): /storage/emulated/0/Android/data/com.learn.test/cache
Context.getExternalFilesDir(""): /storage/emulated/0/Android/data/com.learn.test/files
Context.getExternalFilesDir("test"): /storage/emulated/0/Android/data/com.learn.test/files/test
Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Android/data/com.learn.test/files/Pictures
2.3 公共存储目录: 我们可以在外部存储上新建任意文件夹,不过在6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失。如:
Environment.getExternalStorageDirectory(): /storage/emulated/0
Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0
Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Pictures
参考
【android】getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用
Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别