文章目录

  • 一、Android 10 以前的存储机制
  • 二、Android 10 及以后的分区存储机制
  • 三、Android 10 中的存储过渡方案
  • 四、文件索引数据库
  • 五、相关文档资料

一、Android 10 以前的存储机制


Android 101010 之前的文件系统 , 内存分为两块 , 应用私有目录 , 和 共享存储空间 ;

私有目录 : 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;

共享存储空间 : 所有的应用都可以随意访问 , 随意读写该区域内的数据 , 数据可以任意放置 , 删除 , 修改 ; 应用卸载时写出到该区域的数据不会被删除 ;

任何目录可以存储任何类型文件 , 可以将图片存储到 Movies , 视频存储到 Music 目录中 ;

共享存储空间 绝对是个 天坑 , 能不用尽量不用 ;

二、Android 10 及以后的分区存储机制


Android 101010 及以后的文件系统 :

私有目录 : 与之前保持一致 , 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;

共享存储空间 : Google 官方对该存储区域进行了统一规划 , Android 111111 中 , 每个目录存储什么类型的文件 , 都有相应规范 , 文件不能乱放置 ;

文件存储类型限制 : 文件一旦放错位置 , 就会抛异常 ;

  • 专门存储 图片文件 的目录 Pictures , 只能存放图片 , 不能存放其它类型文件 ,

  • 专门存储 视频文件 的目录 Movies , 只能存视频文件 ;

  • 专门存储音频文件的目录 Music , 只能存储音频文件 ;

  • 专门存储文档文件的目录 Document , 只能存储文档相关文件 ;

  • Download 目录可以放置任何类型的文件 ;

三、Android 10 中的存储过渡方案


Android 101010 版本是过渡版本 , 在该版本中可以选择启用分区存储 , 也可以选择不用 , 在清单文件的 application 节点设置 requestLegacyExternalStorage=“true” 属性可以设置 不启用 分区存储 方案 , 但是 在 Android 111111 中 必须 启用分区存储 , 否则应用不能兼容 Android 111111 系统 ;

Android 101010(API 级别 292929)及之前的系统版本 , 操作文件时 , 使用的 File 类 , 该类只支持传统的存储方式 , 不支持分区存储 ;

Android 111111(API 级别 303030)中不能使用 File 进行文件操作 , 只能使用 MediaStore 进行文件操作 ;

参考文档 - 暂时停用分区存储 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage

四、文件索引数据库


Android 111111(API 级别 303030) 之后的存储机制 : Android 中所有文件存储 , 都会将文件的索引存储在数据库中 , 在 /data/data/com.android.providers.media 目录下的文件就是专门用于管理该数据库的 ;

在 /data/data/com.android.providers.media 目录下有 444 个目录 , cache , code_cache , databases , shared_prefs , 其中 databases 就是存储的上述文件索引数据库 , 有两个数据库文件 : external.db , internal.db ;

查看命令 :

walleye:/ # cd  /data/data/com.android.providers.media
walleye:/data/data/com.android.providers.media # ls
cache code_cache databases shared_prefs
walleye:/data/data/com.android.providers.media # cd databases
walleye:/data/data/com.android.providers.media/databases # ls
external.db internal.db
walleye:/data/data/com.android.providers.media/databases #

将 external.db 数据库拷贝出来 , 使用 SQLite 查看工具查看该数据库 , 该数据库中有一张 files 数据表 , 就是存放文件索引的 , 只有开启分区存储时 , 才将所有的文件都保存在该数据库表中 ;

生成文件索引 :

  • 在老版本的文件系统中 , 只有将文件放在 Pictures , Movies , Music , Document 等目录下时 , 才生文件索引放在数据库中 , 在 SD 卡其它位置创建文件 , 不会生成文件索引 ;

  • 在新版本的分区存储中 , 上述数据表中管理所有 SD 卡上的文件 , 所有的文件和目录都会显示在上述数据库中 ;

external.db 数据库 files 数据表字段简介 :

  • _id : 每个文件都会被赋予一个 id , 不会重复 ;

  • tittle : 文件名称 , 一般是文件的完整名称去掉文件后缀 ;

  • _display_name : 文件的完整名称 , 带后缀 ;

  • mime_type : 文件的 MIME 类型 ;

五、相关文档资料


Android 文件处理参考文档 :

  • 数据和文件存储概览 : https://developer.android.google.cn/training/data-storage

  • 访问应用专属文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin

  • 保存到共享的存储空间 : https://developer.android.google.cn/training/data-storage/shared

  • 管理存储设备上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files

  • 分享文件 : https://developer.android.google.cn/training/secure-file-sharing

  • 应用安装位置 : https://developer.android.google.cn/guide/topics/data/install-location

  • Android 存储用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases

  • FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider

【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )相关推荐

  1. 【Android 文件管理】分区存储 ( 修改与删除图片文件 )

    文章目录 一.分区存储模式下使用 MediaStore 修改图片 二.分区存储模式下使用 MediaStore 删除图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...

  2. 【Android 文件管理】分区存储 ( 创建与查询图片文件 )

    文章目录 一.分区存储模式下使用 MediaStore 插入图片 二.分区存储模式下使用 MediaStore 查询图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...

  3. 【Android 文件管理】分区存储 ( MediaStore 文件操作 )

    文章目录 一.动态权限申请 二.MediaStore 操作文件 三.完整代码示例 1.MainActivity 核心代码 2.build.gradle 构建脚本 3.清单文件 五.相关文档资料 特别注 ...

  4. Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装

    文件存储 前言 文件存储 内存 内部存储 外部存储 内部存储操作 API 读写操作 外部存储操作 公共目录 私有目录 私有文件 私有缓存 文件各种操作封装 前言 众所周知,数据存储在每个应用中都会用到 ...

  5. MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间

    文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...

  6. MySQL简介、M有SQL的存储引擎、表、字段和数据

    Java知识点总结:想看的可以从这里进入 目录 2.MySQL特性介绍 2.1.MySQL简介 2.2.存储引擎 2.3.表.字段.数据 2.MySQL特性介绍 2.1.MySQL简介 MySQL 是 ...

  7. android增加内置存储分区,详解Android10的分区存储机制(Scoped Storage)适配教程

    1. 简介 大家应该都有过这样的体会,手机用着用着里面就充斥着各种不懂的文件夹和文件.甚至是连已经删除的软件的文件夹还存在. 为什么会发生的这样的问题呢? 因为google的缺席,导致android生 ...

  8. 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )

    文章目录 一.存储空间分类 二.存储空间访问权限 三.分区存储 四.相关文档资料 一.存储空间分类 在 Android 999( API 级别 282828 ) 及以下版本中 , Android 文件 ...

  9. 结合Android去水印APP谈谈分区存储

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 方便个人更新微信状态,上周花半天时间编写简单的抖音去水印AP ...

最新文章

  1. 分享:Orthanc 0.4.0 发布,DICOM 服务器
  2. b2b b2c o2o电子商务微服务云平台
  3. HDU-4081 Qin Shi Huang's Road 8ystem(次小生成树)
  4. 关于OSPF用反掩码
  5. Product description search in opportunity line item
  6. CKEditor 5 v19.1.1 发布,新增导出为 PDF 功能
  7. 推荐10款 好用的 Jquery 评分插件
  8. python函数参数用法_Python:函数参数类型及其用法
  9. 通过新版阿里ACE认证,实验操作题你来解一下
  10. 关于闰年和平年的每个月有多少天
  11. 如何配置Web服务器?web服务器配置方法步骤
  12. oracle静态注册6,oracle数据库静态注册
  13. jQuery+Ajax+全解析
  14. datanucleus+spring 的JDO操作 select save update delete
  15. 类似微信5.x朋友圈的弹出框评论功能
  16. 解决Ubuntu终端里面显示路径名称太长
  17. Java 密码学算法
  18. 驰骋BPM工作流后台常用接口与前台常用方法
  19. mac地址储存在计算机的内存,mac地址通常存在计算机的
  20. 平面四节点等参单元和八节点等参单元的单元刚度矩阵计算MATLAB代码实现

热门文章

  1. 【Javascript】之eval()
  2. Java读书笔记05 类与对象
  3. .net Redis使用公共方法引用CSRedisCore
  4. python 中一些常用的内置函数
  5. 乱码问题引申 python 中string和unicode
  6. Mysql 查看、创建、更改 数据库和表
  7. Eclipse启动报错Java was started but returned exit code=13
  8. 153. Find Minimum in Rotated Sorted Array
  9. ViewState的使用
  10. 试试回答Frankyang的问题-什么样的人适合攻读博士学位?