Android文件系统管理工具类

###0. 前言
App在许多情况下都需要对数据进行缓存,通常存储的路径分为:

  • 内部存储
  • 外部存储(SDCard)

作为开发者,我们需要根据业务场景选定存储方式对数据进行存储。而主要分析的场景有以下几点:

  • 缓存文件的大小
  • 缓存文件是否跟随APP删除而清除
  • 缓存文件所在位置的读写、执行权限问题
  • 缓存文件的类型
  • Android的”清除数据”功能带来的影响
  • 针对没有外部存储的手机的兼容问题

###1.1 内部存储
内部存储指的是App的内部存储空间,路径通常为:/data/data/<包名>/...,Android中的SharedPreferences、database、so库文件等都存放于此。

  1. /data/data/<包名>/cache:缓存部分APP运行中产生的临时文件
  2. /data/data/<包名>/databases:数据库默认的生成目录(可以通过重写ContextWrapper修改)
  3. /data/data/<包名>/files:App项目的assets中的文件
  4. /data/data/<包名>/lib:存放so库文件
  5. /data/data/<包名>/shared_prefs:存放SharedPreferences产生的xml文件
  6. /data/data/<包名>/app_webview:webView的缓存目录(HTML5使用的LocalStorage也是存放于此)

###1.2 外部存储
外部存储指的是Android手机自身扩展的存储空间或者外部插入SDCard的存储空间,路径通常为:/storage/sdcard/mnt/sdcard/storage/emulated/0/sdcard等,这些路径全部都是指向同一个存储空间地址。

外部存储还包括手机外部SDCard插槽插入的SDCard和通过OTG线插入的移动U盘。它们的挂载路径以打印为准,不同品牌的手机可能不一样。

在访问外部存储时,需要声明SDCard的读写权限。

  • < uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />
  • < uses-permission android:name ="android.permissions.READ_EXTERNAL_STORAGE" />

###1.3 App数据存储路径(私有目录)

  • /data/data/<包名>/
  • /storage/emulated/0/Android/data/<包名>/

在App被删除的时候,上面两个相关的路径会被移除。

在android系统设置的应用列表详情页里,有一个清除数据的功能,同样也是移除上述两个路径的全部数据。

所以,在保存App相关的缓存文件时,首要选择就是这两个文件目录。其中,由于内部存储空间较小,通常会优先采用外部存储路径存储文件,在找不到外部存储时才存储必要文件到内部存储空间中。

###1.4 公共存储
如果保存的是一些可以共享的文件,例如:图片、音频、视频文件等,可以直接存储在公共的标准目录中。谷歌提供了一套存放的标准目录给开发者选择。

以下都是Environment中的dir的参数type的类型(例如:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)):

  • android.os.Environment.DIRECTORY_MUSIC //音乐存放的标准目录
  • android.os.Environment.DIRECTORY_PODCASTS //系统广播存放的标准目录
  • android.os.Environment.DIRECTORY_RINGTONES //系统铃声存放的标准目录
  • android.os.Environment.DIRECTORY_ALARMS // 系统提醒铃声存放的标准目录。
  • android.os.Environment.DIRECTORY_NOTIFICATIONS //系统通知铃声存放的标准目录
  • android.os.Environment.DIRECTORY_PICTURES //图片存放的标准目录
  • android.os.Environment.DIRECTORY_DCIM //相机拍摄照片和视频的标准目录
  • android.os.Environment.DIRECTORY_MOVIES //电影存放的标准目录
  • android.os.Environment.DIRECTORY_DOCUMENTS //文档
  • android.os.Environment.DIRECTORY_DOWNLOADS //下载的标准目录

对应路径:
/storage/emulated/0/+ Type

当然,也可以自己创建新目录到SdCard中,对数据进行存储。

###1.5 文件夹权限
Android的文件系统可以参考linux的文件系统的权限。

例如:一个目录的权限为: d rwx rwx –x

  • 第一个字符d代表目录
    • 目录:d
    • 文件:-
    • 连结档(link file):l (通常app的lib目录就是此类型)
  • 可读:r
  • 可写:w
  • 可执行:x
  • 无权限:-

权限组分为3组:
d rwx(1.拥有者) rwx(2.同一群组用户) –x(3.其他用户)

###2.0 附

通用的文件路径工具类,优先采用外部存储目录: FileManager

###3.0 总结
Android的文件系统的使用需要根据业务场景进行选择,同时得考虑在不同品牌、系统的机型中的不同表现。所以,需要多测试。

END

–Nowy

–2019.02.12

分享到