Android 存储位置及 API

一、内部存储

应用安装后都会在Android 根目录生成 /data/data/packagename,当前应用读取不需要读写权限

注意: 有些开发者可能看到过应用的根目录为 /data/user/0/packagename 的情况,这里解释一下,Android 4.2 版本添加了同一设备可以登录不同用户的功能(由于专利原因仅限于平板电脑,手机不支持此功能),所以为了区分不同用户在同一应用中的设置和存储的数据,添加了该系列的路径,该路径指向 /data/data/packagename

  1. getFileDir() 方法得到的是该目录下 files 文件夹的 File 对象
  2. getChacheDir() 方法得到的是该目录下 cache 文件夹的 File 对象
  3. 直接调用ContextWrapper的 openFileOutput(String name,int mode) 也会在该目录下 files 文件夹下创建相应的文件,并且是私密的。可以修改为其他应用可访问的,通过 openFileOutput 方法的 mode 参数来完成

注意:
1. 该目录只有 root 权限下可以查看,会随着应用卸载删除
2. 应用程序详情中清除数据会将 packagename 下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename 的整个目录删除删除
3. 应用程序详情中清除缓存会将 packagename/cache 目录下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename/cache 的整个目录删除

二 内置存储

手机自带 ROM 的存储路径

  1. getExternalCacheDir() 方法,获取内置存储卡中 /Android/data/packagename/cache 目录的路径,4.4及之后读写不需要权限,会随着应用卸载删除
  2. getExternalFilesDir() 方法,获取内置存储卡中 /Android/data/packagename/files 目录的路径,4.4之后读写不需要权限,会随着应用卸载删除,该方法参数为 "null" 时不指定子文件夹,指定时创建子文件夹保存文件。创建的文件其他应用只要有读写权限也可以读取,如果要私密的就使用内部存储。
  1. Environment.getExternalStorageDirectory() 方法得到的是内置存储目录的根路径目录,读写需要权限,不会随着应用卸载删除
  2. Environment.getExternalStoragePublicDirectory() 方法得到的是内置存储目录根路径下的特定类型文件的公共目录,读写需要权限,不会随着应用卸载删除

注意,内置存储中 /Android/data/packagenaem/ 路径的读写 Android 版本不同,需要权限不同,所以开发时应始终声明读写权限

三、外置SD存储卡

支持外置SD存储卡的机器,可以由 ContextCompat 的 getExternalFilesDirs() 方法得到所有存储根目录下 /Android/data/packagename/files 路径的数组,如果该方法第二个参数不为 null 则会再创建相应子级文件夹。再根据数组遍历,即可操作相应的存储路径进行读写。4.4及之后该操作不需要声明读写权限。
File[] files = ContextCompat.getExternalFilesDirs(this, "");

注意:

  1. 通过该方法得内置存储卡的路径,可以对根据 getParent 系列方法可以得到上一级的路径进行读写操作,但需要权限
  2. 通过该方法得外置SD存储卡的路径,但是不可以对根据 getpParent 系列方法得到的上级路径进行写,如果写会报没有权限异常,即使声明写权限也没用。声明读权限后可正常进行读操作。
  3. 内置和外置SD存储卡中 Android/data/packagename 目录,都会在应用程序详情中清除数据和应用卸载时被删除。

更多相关文章

  1. Android输入输出机制之来龙去脉之前生后世
  2. 一步步探索学习Android(安卓)Touch事件分发传递机制(一)
  3. Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout
  4. Android(安卓)进程间通信AIDL简单使用
  5. Android(安卓)DiskLruCache完全解析
  6. Android(安卓)之 LayoutInflater 全面解析
  7. android 菜单设计
  8. Android应用配置文件解析
  9. Android实现固定屏幕显示的方法

随机推荐

  1. Android webView与js 交互以及jsbridge框
  2. Android高德地图使用
  3. Android 日期时间选择控件
  4. 安卓自定义View(第一篇)
  5. android自动更新升级APP
  6. Android中的Dialog用法讲解大全
  7. Android 定制万能Adapter
  8. android 获取设备真实ip地址
  9. Android Studio版本控制指南
  10. android之Buffer类及子类学习