Android应用开发——文件目录
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应用开发——文件目录相关推荐
- Android安全开发之安全使用HTTPS
此文章转载于点击打开链接 Android安全开发之安全使用HTTPS 1.HTTPS简介 阿里聚安全的应用漏洞扫描器中有证书弱校验.主机名弱校验.webview未校验证书的检测项,这些检测项是针对AP ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )
文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- Android应用开发-快速入门
内容摘要 了解Android 操作系统 搭建Android 开发工具 使用Android 模拟器 案例-电话拨号器/短信发送器 掌握点击事件的四种实现方式 掌握Android 常见布局 了解Andro ...
- Android应用开发:数据存储和界面展现-1
1. 相对布局RelativeLayout 特点:相对布局所有组件可以叠加在一起:各个组件的布局是独立的,互不影响:所有组件的默认位置都是在左上角(顶部.左部对齐) 属性 功能描述 android:l ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
- 快速接入 Android BLE 开发的基础框架
代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...
- Android 高级开发 JNI NDK 介绍与使用
Android 高级开发 JNI & NDK 介绍与使用 前言 对于没接触过的领域,即是挑战也是机遇,不仅能够提升自己的能力.还能够学习到新的技术知识 而学习新的技术的时候,最好是从头开始按照 ...
- Android 系统开发
本文旨在记录在研究和开发 Android 系统的过程中学习到的星星点点,以备日后之用~ 内容包括:开发环境.安装程序.系统分区.目录概览.进程分析.内核对比. > 开发环境 1.安装 Eclip ...
最新文章
- SpringBoot第十六篇:用restTemplate消费服务
- 全面接入「人脸识别」,智慧城市公共服务的另一种思路
- ENTBOOST V1.0 发布,开源企业IM免费企业即时通讯
- 厉害了,教你用 Spring Boot 控制并发登录人数
- 干货 | BBR及其在实时音视频领域的应用
- c语言和java和汇编语言_C语言和汇编语言的区别是什么?
- Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)
- 前端学习(1689):前端系列javascript之如何搞定面试题
- Python(5)-注释
- 当包装类的要与基本类型进行比较时候 需要先将包装类降级为基本类型
- 中内连和外联的去区别_外联福利 || 卡西欧计算器
- 【裴礼文数学分析】例1.1.3
- 操作系统:哲学家就餐问题
- win7显示文件的扩展名
- #!/bin/bash 和 #!/usr/bin/env bash 的区别
- 实验吧 NSCTF web200
- 【解答】多台西门子PLC之间可不可以无线通讯
- 设计模式(十)----策略模式
- 【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的整体框架与流程
- 电商后台产品设计:订单拆单