文档章节

全面的Android文件目录解析和获取方法(包含对6.0系统的说明)

2tman
 2tman
发布于 2017/05/04 17:12
字数 897
阅读 20
收藏 1

在android 6.0以前,你可以只关注外置存储是否挂载即可,但是从6.0以后,也就是M系统后,还需要判断是否有读写权限,只有具备这些权限才可以读写外置存储。

 

1,Context.getFilesDir

获取路径:/data/user/0/应用包名/files

该目录是应用的文件存储目录,应用被卸载时,该目录一同被系统删除。默认存在,默认具备读写权限(6.0系统可以不用向用户申请)

 

2,Context.getCacheDir

获取路径:/data/user/0/应用包名/cache

该目录是应用的文件缓存目录,应用被卸载时,该目录一同被系统删除。默认存在,默认具备读写权限。不同于getFileDir,该目录下的文件在系统内存紧张时,会被清空文件,来腾出空间供系统使用,著名的图片加载库ImageLoader就是在没有外置存储读写权限时使用此文件夹。getFileDir,不会因为系统内存不足而被清空。(6.0系统可以不用向用户申请)

 

3,Context.getObbDir

获取路径:/storage/emulated/0/Android/obb/应用包名 

该目录是应用的数据存放目录,一般被用来存放游戏数据包obb文件。默认存在,可读写(6.0系统可以不用向用户申请)

 

4,Context.CodeCacheDir

获取路径:/data/user/0/应用包名/code_cache

默认存在,可读写。(6.0系统可以不用向用户申请)

 

5,Context.getExternalFilesDir

获取路径:(以下载目录为准) /storage/emulated/0/Android/data/应用包名/files/Download

默认存在,可读写。(6.0系统可以不用向用户申请)

 

6,Context.getExternalCacheDir

获取路径:/storage/emulated/0/Android/data/应用包名/cache

默认存在,可读写。(6.0系统可以不用向用户申请)

 

7,Context.getDatabasePath

获取路径:/data/user/0/应用包名/databases/参数名

默认不存在,可读写。(6.0系统可以不用向用户申请)

 

8,Context.getDir

获取路径:/data/user/0/应用包名/app_参数名

默认存在,可读写。分为Private等三个权限,private代表仅能自己访问。(6.0系统可以不用向用户申请)

 

9,Context.getPackageCodePath

获取路径:/data/app/应用包名-1/base.apk

默认存在,获取apk包路径

 

10,Context.getRootDirectory

获取路径:/system

默认存在,不可读写(除非具备root权限)

 

11,Environment.getExternalStorageDirectory

获取路径:/storage/emulated/0

默认存在,声明权限则可读写(6.0和以后系统还需要向用户申请同意才可以)

 

12,Environment.getExternalStoragePublicDirectory

获取路径:/storage/emulated/0/Download(以下载目录为例)

默认存在,声明权限则可读写(6.0和以后系统还需要向用户申请同意才可以)

 

13,Environment.getDownloadCacheDirectory

获取路径:/cache

默认存在,声明权限则可读写(6.0和以后系统还需要向用户申请同意才可以)

 

14,Context.getFileStreamPath

获取路径:/data/data/应用包名/files/download(示例download)

该目录是应用的文件存储目录,应用被卸载时,该目录一同被系统删除。默认存在,默认具备读写权限(6.0系统可以不用向用户申请)

 

附注:

1)上述路径是通过getAbsulotePath方法获得,一般情况下等同于getPath

2)在6.0系统上,一般Java层实现对外置存储的文件操作需要向用户申请,如果用C层实现,则可以越过这种限制

3)配置targetsdk为19,compilesdk为22,可以避免在6.0手机上的权限限制

本文转载自:https://yq.aliyun.com/articles/59477

共有 人打赏支持
2tman
粉丝 12
博文 115
码字总数 31481
作品 0
苏州
Android工程师
Android:我们该如何做一名合格的代码开源者

前言 在进行 开发中,很多时候 我们都是充当 代码引用者的角色,即通过引用别人的代码来实现功能需求 今天,我将教大家如何做一名 合格的代码开源者,所以本文概括如下: 目录 1. (需求)代...

Carson_Ho
09/06
0
0
Android TrafficStats流量监控

一、流量监控TrafficStats 对于Android流量统计来说在2.2版中新加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析。android.net...

IamOkay
2014/11/14
0
0
Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

一、前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 在线更新就上面几个步骤,前2步比较简...

codeGoogle
04/28
0
0
Android包管理机制(四)PMS的创建过程

相关文章 Android包管理机制系列 前言 PMS的创建过程分为两个部分进行讲解,分别是SyetemServer处理部分和PMS构造方法。其中SyetemServer处理部分和AMS和WMS的创建过程是类似的,可以将它们进...

刘望舒
07/31
0
0
Android根据图片Uri获取图片path绝对路径的几种方法【转】

在Android 编程中经常会用到Uri转化为文件路径,如我们从相册选择图片上传至服务器,一般上传前需要对图片进行压缩,这时候就要用到图片的绝对路径。 下面对我开发中uri转path路径遇到的问题...

vetter
09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GO冒泡,二分查找

package mainimport("fmt")func main() {var arr [5]int = [5]int{11,13,9,2,25}maopao(&arr)fmt.Println("arr = ", arr) //[2 9 11 13 25]findIndex := binaryFind(&arr, 0......

汤汤圆圆
9分钟前
1
0
工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三月份,我辞掉已有的工作,...

java知识分子
14分钟前
1
0
讲述下:Linux的10个最危险的命令

导读 Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用。 当然,以下命令通常都...

问题终结者
18分钟前
1
0
分库分表后如何部署上线?

引言 我们先来讲一个段子 面试官:“有并发的经验没?” 应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:...

Java烂猪皮
23分钟前
1
0
Redis源码阅读笔记-快速列表

快速列表 快速列表(quicklist)是由压缩列表(ziplist)组成的一个双向链表,链表中,每一个节点都是以压缩列表(ziplist)的结构保存。 在 Redis3.2 后加入的新数据结构,在列表键中取代了双向链...

Jian_Ming
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部