数据存储之数据存储之——Android内、外存储分区内、外存储分区&常用存储目录详解常用存储目录详解
((Android Q))
本文将以实用的角度来讲解Android中文件操作的常用方式。
存储的存储的”内内“和和“外外”
所有Android设备都有两个文件存储区域:内部存储空间(internal Storage)和外部存储空间(external Storage)。这些名称
是在Android早期确定的,那时候大部分设备都提供内置的非易失性内存(内部存储空间)以及可移动存储媒介(如,Micro SD
卡,提供外部存储空间)。现在,很多设备将永久性存储空间划分为单独的“内部”和“外部”分区。因此,即使没有可移动存储
媒介,这两种存储空间也始终存在,并且无论外部存储空间是否可移动,这两种存储空间的API行为在Android系统上都是相
同的。
所以,Android系统从逻辑上,只分为”internal Storage” 与 “external Storage” 两个存储分区。
内部存储分区(内部存储分区(internal Storage))
内部存储分区,物理位置主要包括了Android系统根目录下的/data、/System、/cache等目录。
内部存储分区的特点:内部存储分区的特点:
内部分区总是可用。
它存放App私有文件,并且不可被其他App访问。
App卸载后,存储在内部分区上的该App数据将会被清除。
不需要额外申请权限。
外部存储分区(外部存储分区(external Storage))
它有以下几个特点:它有以下几个特点:
外部分区并不总是可用。
保存在这里的文件可能被其他程序访问。
当用户卸载app时,系统仅仅会删除external中的缓存目录(Context.getExternalCacheDir())和file目录
(Context.getExternalFilesDir())下的相关文件。
需要申请WRITE_EXTERNAL_STORAGE或READ_EXTERNAL_STORAGE权限。
我们在开发过程中,经常需要读取或者存储一些数据,这些数据可以存储在内部分区中,也可以存储在外部分区中,但不同的
操作方式会有很大区别,我们下面来详细进行分析。
内部存储分区的访问内部存储分区的访问
本节重点来分析内部存储分区的数据访问。内部存储包含了/system、/data、/cache等目录及其子目录。
/system
系统存放目录,它和/sdcard以及/data是同级的,是存储根目录的一级子目录。
访问方式访问方式
可以通过Environment类的getRootDirectory方法访问:
private static final String ENV_ANDROID_ROOT = "ANDROID_ROOT"; //环境变量
private static final File DIR_ANDROID_ROOT = getDirectory(ENV_ANDROID_ROOT, "/system");//如果环境变量指定了,则使用指定值,否则使
用"/system"
public static @NonNull File getRootDirectory() {
return DIR_ANDROID_ROOT;
}
这里通常返回目录是”/system”。
子目录子目录
/system/app:存放rom本身附带的软件即系统软件。
/system/data:存放/system/app中,核心系统软件的数据文件信息。
/system/priv-app:存放手机厂商定制的系统级别的应用的apk文件。
/system/bin:存放系统的本地程序,里面主要是Linux系统自带的组件。
/system/media:存放一些音效、铃声、开关机动画等。
/data目录目录
/data目录时我们App私有数据存储的顶级目录,可以通过Environment.getDataDirectory()获取。