Android基础 你必须了解的应用文件目录

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

概念

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 卡的根目录再新建一些文件夹,就不要写在外部存储私有目录下面了。

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

参考文章:
* android中的文件操作详解以及内部存储和外部存储
* 了解 Android 应用的文件存储目录,掌握持久化数据的正确姿势
* [Android入门之文件系统操作(二)文件操作相关指令](http://blog.csdn.net/mrlixirong/article/details/6800585)

你可以通过以下方式关注我:
1. CSDN
2. 掘金
3. 个人博客
4. Github

猜你喜欢

转载自blog.csdn.net/Sean_css/article/details/79239815
今日推荐