Android 存储位置及 API

一、内部存储

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

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

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

  • 该目录只有 root 权限下可以查看,会随着应用卸载删除
  • 应用程序详情中清除数据会将 packagename 下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename 的整个目录删除删除
  • 应用程序详情中清除缓存会将 packagename/cache 目录下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename/cache 的整个目录删除
二 内置存储
手机自带 ROM 的存储路径

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

三、外置SD存储卡

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

注意:

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

作者:renxuelong
链接:https://www.jianshu.com/p/d5945c726182
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Android应用开发——文件目录相关推荐

  1. Android安全开发之安全使用HTTPS

    此文章转载于点击打开链接 Android安全开发之安全使用HTTPS 1.HTTPS简介 阿里聚安全的应用漏洞扫描器中有证书弱校验.主机名弱校验.webview未校验证书的检测项,这些检测项是针对AP ...

  2. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  3. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  4. Android应用开发-快速入门

    内容摘要 了解Android 操作系统 搭建Android 开发工具 使用Android 模拟器 案例-电话拨号器/短信发送器 掌握点击事件的四种实现方式 掌握Android 常见布局 了解Andro ...

  5. Android应用开发:数据存储和界面展现-1

    1. 相对布局RelativeLayout 特点:相对布局所有组件可以叠加在一起:各个组件的布局是独立的,互不影响:所有组件的默认位置都是在左上角(顶部.左部对齐) 属性 功能描述 android:l ...

  6. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

  7. 快速接入 Android BLE 开发的基础框架

    代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...

  8. Android 高级开发 JNI NDK 介绍与使用

    Android 高级开发 JNI & NDK 介绍与使用 前言 对于没接触过的领域,即是挑战也是机遇,不仅能够提升自己的能力.还能够学习到新的技术知识 而学习新的技术的时候,最好是从头开始按照 ...

  9. Android 系统开发

    本文旨在记录在研究和开发 Android 系统的过程中学习到的星星点点,以备日后之用~ 内容包括:开发环境.安装程序.系统分区.目录概览.进程分析.内核对比. > 开发环境 1.安装 Eclip ...

最新文章

  1. SpringBoot第十六篇:用restTemplate消费服务
  2. 全面接入「人脸识别」,智慧城市公共服务的另一种思路
  3. ENTBOOST V1.0 发布,开源企业IM免费企业即时通讯
  4. 厉害了,教你用 Spring Boot 控制并发登录人数
  5. 干货 | BBR及其在实时音视频领域的应用
  6. c语言和java和汇编语言_C语言和汇编语言的区别是什么?
  7. Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)
  8. 前端学习(1689):前端系列javascript之如何搞定面试题
  9. Python(5)-注释
  10. 当包装类的要与基本类型进行比较时候 需要先将包装类降级为基本类型
  11. 中内连和外联的去区别_外联福利 || 卡西欧计算器
  12. 【裴礼文数学分析】例1.1.3
  13. 操作系统:哲学家就餐问题
  14. win7显示文件的扩展名
  15. #!/bin/bash 和 #!/usr/bin/env bash 的区别
  16. 实验吧 NSCTF web200
  17. 【解答】多台西门子PLC之间可不可以无线通讯
  18. 设计模式(十)----策略模式
  19. 【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的整体框架与流程
  20. 电商后台产品设计:订单拆单

热门文章

  1. C++ primer三章二节标准库类型string
  2. C++静态类型成员变量的初始化顺序(单例模式)
  3. TS流头部的调整字段
  4. 分布式消息中间件 : Rocketmq
  5. 从零开始玩转 logback、完整配置详解
  6. 解决 linux 下安装 node 报: command not found
  7. Docker容器硬盘热扩容-centos6
  8. Lambda表达式使用2
  9. BZOJ.2741.[FOTILE模拟赛]L(分块 可持久化Trie)
  10. DreamWeaver使用技巧学习心得