博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android基础 你必须了解的应用文件目录
阅读量:7041 次
发布时间:2019-06-28

本文共 1861 字,大约阅读时间需要 6 分钟。

在开发中一般会对手机的内存进行操作,比如在使用应用过程中产生的一些日志、图片等信息,我们有时候要对其进行必要的操作,所以要对文件这一块要有一个基础的理解。

概念

1、内部存储:

首先说明一个概念,内部存储不是内存,而是像磁盘一样可以存储数据的地方,他在手机内部,属于手机自带内存的一部分。

内部存储私有目录

里面有一个 data/data 文件夹,下面存放是所有应用程序的包名文件夹,这部分的内容只有在手机 root 之后才能看得到,如果使用的是模拟器,可以在 Android Device Monitor 中看到。

比如一个应用的包名为 com.test.test 那么这个应用只能访问 /data/data/com.test.test 目录下面的文件,其他 data/data 目录下面的文件这个应用是访问不到的

方法:

  • Environment.getDataDirectory(); 获取data根目录

  • getFilesDir() 方法用于获取 /data/data/<application package>/files 目录

  • getCacheDir() 方法用于获取 /data/data/<application package>/cache 目录

  • deleteFile() 删除文件

  • fileList() 列出所有文件

注意:当用户卸载 App 时,系统自动删除 data/data 目录下对应包名的文件夹及其内容。

2、外部存储

这里不要被外部存储几个字所迷惑,这里说的外部存储其实不单单指的外置的内存卡, Android 手机在出厂的时候的内存,比如平常我们所说的 64G 、128G 内存,这个部分就是我们开发人员所说的外部存储。

那我们往手机里面插入的内存卡叫什么呢? 对的,也是叫外部存储。

在参考文章看到一句话:只要是能看得到,都是外部存储

外部存储私有目录

备注:一般设备都有内置 SD 卡,同时也提供外部 SD 卡拓展,可能对应路径的目录名有所差异。

如果没有插入内存卡的话,一般外部存储的私有目录就是:

/storage/emulated/0/Android/data/app package name复制代码

方法:

  • Environment.getExternalStorageDirectory(); 获取 SD 卡根目录
  • getExternalFilesDir() 方法用于获取 /storage/emulated/0/Android/data/<application package>/files 目录
  • getExternalCacheDir() 方法用于获取 /storage/emulated/0/Android/data/<application package>/cache 目录

除了上面的files目录和cache目录,我们可以根据自己的分类建立其他的目录,便于我们更好的管理

3、内部存储私有目录 VS 外部存储私有目录

不同点

  • 默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容

  • 自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问

  • 宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限

相同点

  • 同属于应用私有目录,当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。

4、最后

内部存储私有目录:

  • SharedPreferences
  • SQLiteDatabase
  • App 中的 WebView 缓存页面信息

不要往里面存放太多的数据

外部存储私有目录:

  • 应用自己使用的图片等数据
  • 缓存数据
  • 日志数据

如果想被其他应用访问到的数据,在 SD 卡的根目录再新建一些文件夹,就不要写在外部存储私有目录下面了。

暂时写这么多,以后开发过程中继续填补。

参考文章:

  • [](http://blog.csdn.net/mrlixirong/article/details/6800585)

你可以通过以下方式关注我:

你可能感兴趣的文章
如何基于ReplayKit实现低延迟rtmp推屏
查看>>
说说JSON和JSONP,也许你会豁然开朗
查看>>
没有所谓好与不好,只是能否适用和用的好
查看>>
程序员写简历时必须注意的技术词汇拼写(持续更新...)
查看>>
ams光学传感器助力小米手机创新发展
查看>>
Python 特色介绍
查看>>
JavaScript_知识点梳理note1
查看>>
PostgreSQL 开启with-llvm(JIT)后,新增插件异常(clang: Command not found)处理
查看>>
思考设计SQL优化方案
查看>>
tomcat 调优-生产环境必备
查看>>
浅析C++的引用与const指针与各种传递方式
查看>>
Java并发编程75道面试题及答案
查看>>
仓储+调度,YOGO智能配送站能否改变外卖配送格局?
查看>>
jQuery-easyui和validate表单验证实例
查看>>
【对讲机的那点事】5G时代的到来,2G和3G将会被关停?
查看>>
DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--week3 超参数调试、Batch正则化和程序框架...
查看>>
NSMutableArray 简单细说
查看>>
Docker 助力百年研发院校的现代化改造,让 IT 资源物尽其用!
查看>>
各个 C# 版本的主要特性、发布日期和发布方式(C# 1.0 - 7.3)
查看>>
什么是nofollow标签?如何影响网站排名?
查看>>