转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【赵彦军的博客】

文章目录

  • 沙箱私有目录
  • 外部存储空间中的应用私有目录
  • 外部存储公有目录
  • 清除缓存 、清除数据有什么区别?

沙箱私有目录

  • 内部存储空间中的应用私有目录
val filesDir = filesDir
/data/user/0/com.example.myapplication/filesval cacheDir = cacheDir
/data/user/0/com.example.myapplication/cache

app 的私有目录,也称沙箱。App 卸载后,此目录随之删除。文件管理器无法访问,除非root。还有一种方法,把手机连到到电脑上,运行 app debug 模式,用 AndroidStudio 工具是可以看到的。

cacheDir:机身内存不足时,文件会被删除

需要注意的是,appSharedPreferencesSQLiteDatabase 持久化应用相关数据也在这个目录的父目录。

SharedPreferences: /data/user/0/app_package_name/shared_prefs
SQLiteDatabase:       /data/user/0/app_package_name/databases

Context 提供了一个简便方式,来获取一个内部私有目录

//获取一个私有目录,如果没有,系统自动创建
val dir = getDir("myFile", Context.MODE_PRIVATE)
/data/user/0/app_package_name/myFile
  • mode 是指文件夹的访问权限而并不包括其子文件夹和文件的访问权限:
  • MODE_PRIVATE :该文件只能被当前程序读写;
  • MODE_APPEND : 以追加方式打开该文件,应用程序可以向该文件中追加内容。
  • MODE_WORLD_READABLE :该文件的内容可以 被其他程序读取。
  • MODE_WORLD_WRITEABLE :该文件的内容可以 被其他程序读取、写入。

外部存储空间中的应用私有目录

val externalCacheDir = externalCacheDir?.absolutePath
/storage/emulated/0/Android/data/app_package_name/cacheval filesDir = getExternalFilesDir(null)  //null 代表根目录
/storage/emulated/0/Android/data/app_package_name/files

这个目录,是沙箱目录,App 卸载后,此目录随之删除 ,这个目录可以通过文件管理器访问。有一点是特别需要注意的,这个目录存储在 SD 卡上,如果用户把 SD 卡卸载了,那么这个目录将不可用。

内部私有目录、外部私有目录 均不需要申请权限。

值得注意的是,与内部存储空间的应用私有目录不同的是:

  • 第一,默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容。
  • 第二,自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问。
  • 第三,宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限。
  • 而相同点在于:同属于应用私有目录,当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。
//判断SD卡是否可用:
val state = EnvironmentCompat.getStorageState(file)
if (state == Environment.MEDIA_MOUNTED) {//sd卡可用
}

外部存储公有目录

val dataDir = Environment.getDataDirectory().absolutePath
/dataval storageDir = Environment.getStorageDirectory().absolutePath
/storage

需要注意的是:这两个目录需要权限声明 , 在 6.0 及以上还需要动态申请权限

如果没有权限,app 会崩溃

//动态申请权限:
ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE),200
)

清除缓存 、清除数据有什么区别?

app里面有清除缓存,清除数据,但是这两个有什么区别呢?

  • 清除数据 = 清除内部存储空间 cache + 清除内部存储空间 files + 清除外部存储空间 cache + 清除外部存储空间 files
  • 清除缓存 = 清除内部存储空间 cache + 清除外部存储空间 cache

Android 应用目录分析相关推荐

  1. Android——Framework目录分析及系统启动过程以及目录简介

    转自:http://blog.csdn.net/cubelee/article/details/7392552 1.目录树 /framework/base/api  /framework/base/a ...

  2. 【Android 逆向】Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )

    文章目录 一.文件所有者与分组 二./sdcard/ 的文件分组 三./data/ 目录分析 四.用户类型 一.文件所有者与分组 使用 ls -l 命令 , 查看 Android 系统根目录 , 下图 ...

  3. Android源码分析-全面理解Context

    前言 Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像 ...

  4. Android系统启动流程分析之安装应用

    2016六月 21 原 Android系统启动流程分析之安装应用 分类:Android系统源码研究 (295)  (0)  举报  收藏 跟随上一篇博客Android系统的启动流程简要分析继续分析an ...

  5. Android_项目文件结构目录分析

    android项目文件结构目录分析 在此我们新建了一个helloworld的项目,先看一些目录结构: 这么多的文件夹和文件中,我们重点关注是res目录.src目录.AndroidManifest.xm ...

  6. Android内存泄漏分析及调试

    2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...

  7. android camera fragment,Android Camera 模块分析(三)

    第三部分 Camera的主要实现分析 3.1 JAVA程序部分 在packages/apps/Camera/src/com/android/camera/ 目录的Camera.java文件中,包含了对 ...

  8. Android 系统(74)--Android重启原因分析

    Android重启原因分析 重启原因分类 1.上层造成重启 system_server被杀 watchdog重启 重要线程阻塞 2.kernel造成重启 空指针 非法地址 3.kernel watch ...

  9. Android 系统性能优化(43)---Android OOM案例分析

    Android OOM案例分析 在Android(Java)开发中,基本都会遇到java.lang.OutOfMemoryError(本文简称OOM),这种错误解决起来相对于一般的Exception或 ...

最新文章

  1. 2021年编程语言趋势预测:Python和JavaScript仍火热,Go不可小觑
  2. MFC中制作一个似命令行的输入框
  3. 浅尝Windows Server 2016——Container 容器:部署
  4. JavaScript 技术篇-js只获取本节点text文本,不包含子节点
  5. ZedGraph怎样在双击图形后添加箭头标记
  6. C/C++协程实现-学习笔记
  7. ubuntu下搭建nfs服务器
  8. python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
  9. PHP游戏扫码登录器源码 支持一百多种热门游戏登录
  10. spring 源码下载地址
  11. BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
  12. PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理
  13. Substrings (C++ find函数应用)
  14. 物理学步入禅境,缘起性空
  15. 苹果手机没声音了显示耳机模式_Airpods Pro 安卓苹果双机体验
  16. php ascii过滤,php过滤ascii控制字符
  17. C语言结构体typedef struct详解
  18. 美元指数的变化对国际黄金有哪些影响
  19. 跳槽前恶补面试题,成功上岸阿里,拿到33k的测开offer
  20. VTK_Learning_体绘制裁剪_Cropping技术

热门文章

  1. yolo 负样本_目标检测介绍之YOLO与SSD
  2. CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.76 GiB total capacity; 652.77 MiB alread
  3. B站疯传,一整套人工智能学习资料免费送,不谢!
  4. 工程之道,深度学习推理性能业界最佳优化实践
  5. 从工作的角度,NLP/CV/推荐系统选哪个?
  6. “让Keras更酷一些!”:分层的学习率和自由的梯度
  7. CentOS 7 从下载到安装
  8. python中打印zip()函数结果和zip()函数的使用
  9. 多个python文件相互调用_用 python提取两个文件之间的内容
  10. 北京大学计算机研究所所长,北大计算机研究所所长郭宗明:探索新机制,释放科研创新能力...