【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )
文章目录
- 一、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 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )相关推荐
- 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
文章目录 一.分区存储模式下使用 MediaStore 修改图片 二.分区存储模式下使用 MediaStore 删除图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...
- 【Android 文件管理】分区存储 ( 创建与查询图片文件 )
文章目录 一.分区存储模式下使用 MediaStore 插入图片 二.分区存储模式下使用 MediaStore 查询图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...
- 【Android 文件管理】分区存储 ( MediaStore 文件操作 )
文章目录 一.动态权限申请 二.MediaStore 操作文件 三.完整代码示例 1.MainActivity 核心代码 2.build.gradle 构建脚本 3.清单文件 五.相关文档资料 特别注 ...
- Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装
文件存储 前言 文件存储 内存 内部存储 外部存储 内部存储操作 API 读写操作 外部存储操作 公共目录 私有目录 私有文件 私有缓存 文件各种操作封装 前言 众所周知,数据存储在每个应用中都会用到 ...
- MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间
文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...
- MySQL简介、M有SQL的存储引擎、表、字段和数据
Java知识点总结:想看的可以从这里进入 目录 2.MySQL特性介绍 2.1.MySQL简介 2.2.存储引擎 2.3.表.字段.数据 2.MySQL特性介绍 2.1.MySQL简介 MySQL 是 ...
- android增加内置存储分区,详解Android10的分区存储机制(Scoped Storage)适配教程
1. 简介 大家应该都有过这样的体会,手机用着用着里面就充斥着各种不懂的文件夹和文件.甚至是连已经删除的软件的文件夹还存在. 为什么会发生的这样的问题呢? 因为google的缺席,导致android生 ...
- 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
文章目录 一.存储空间分类 二.存储空间访问权限 三.分区存储 四.相关文档资料 一.存储空间分类 在 Android 999( API 级别 282828 ) 及以下版本中 , Android 文件 ...
- 结合Android去水印APP谈谈分区存储
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 方便个人更新微信状态,上周花半天时间编写简单的抖音去水印AP ...
最新文章
- 分享:Orthanc 0.4.0 发布,DICOM 服务器
- b2b b2c o2o电子商务微服务云平台
- HDU-4081 Qin Shi Huang's Road 8ystem(次小生成树)
- 关于OSPF用反掩码
- Product description search in opportunity line item
- CKEditor 5 v19.1.1 发布,新增导出为 PDF 功能
- 推荐10款 好用的 Jquery 评分插件
- python函数参数用法_Python:函数参数类型及其用法
- 通过新版阿里ACE认证,实验操作题你来解一下
- 关于闰年和平年的每个月有多少天
- 如何配置Web服务器?web服务器配置方法步骤
- oracle静态注册6,oracle数据库静态注册
- jQuery+Ajax+全解析
- datanucleus+spring 的JDO操作 select save update delete
- 类似微信5.x朋友圈的弹出框评论功能
- 解决Ubuntu终端里面显示路径名称太长
- Java 密码学算法
- 驰骋BPM工作流后台常用接口与前台常用方法
- mac地址储存在计算机的内存,mac地址通常存在计算机的
- 平面四节点等参单元和八节点等参单元的单元刚度矩阵计算MATLAB代码实现
热门文章
- 【Javascript】之eval()
- Java读书笔记05 类与对象
- .net Redis使用公共方法引用CSRedisCore
- python 中一些常用的内置函数
- 乱码问题引申 python 中string和unicode
- Mysql 查看、创建、更改 数据库和表
- Eclipse启动报错Java was started but returned exit code=13
- 153. Find Minimum in Rotated Sorted Array
- ViewState的使用
- 试试回答Frankyang的问题-什么样的人适合攻读博士学位?