Android 文件存储

一直一来没有认真关注过android 的文件存储,现在做一个总结,我认为有用的,网上的博客真是写的叫一个渣渣,根本就是糊弄.

App专属文件 vs App独立文件

app专属文件就是那些只有该app才可以使用的文件,例如专属格式的电子书,app独立文件就是那些不依赖于某特定app的文件,例如照片。
相关链接: http://blog.csdn.net/nugongahou110/article/details/48154859

访问外部存储权限

从Android 1.0开始,写操作受权限WRITE_EXTERNAL_STORAGE保护。

从Android 4.1开始,读操作受权限READ_EXTERNAL_STORAGE保护。

从Android 4.4开始,应用可以管理在它外部存储上的特定包名目录,而不用获取WRITE_EXTERNAL_STORAGE权限。

比如,一个包名为com.example.foo的应用,可以自由访问外存上的Android/data/com.example.foo/目录。

外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上

特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。

对于多用户的情况,一般每个用户都会有自己独立的外部存储,应用仅对当前用户的外部存储有访问权限。

Environment API的目录

1. getDataDirectory:用户数据目录。
2. getDownloadCacheDirectory:下载缓存内容目录。
3. getExternalStorageDirectory:主要的外部存储目录。但是这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过getExternalStorageState来获取当前状态。( 为了不污染用户的根命名空间,一般不会直接使用这个外部存储的根目录 )

任何应用私有的文件都应该被放置在Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会清理的就是这个目录。
另一些共享文件应该被放置在 getExternalStoragePublicDirectory(String)返回的目录中。
写这个路径需要WRITE_EXTERNAL_STORAGE权限,读需要 READ_EXTERNAL_STORAGE权限,当然写权限默认包含了读权限。

KITKAT 即Android 4.4开始,如果你的应用只是需要存储一些内部数据,可以考虑使用
getExternalFilesDir(String)
或者
getExternalCacheDir()
它们不需要获取权限。

4. getExternalStoragePublicDirectory : 这个方法接收一个参数,表明目录所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量,比如DIRECTORY_DCIM等。

注意:传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,比如使用File.mkdirs创建该路径。

5. getRootDirectory : 得到Android的根目录。
6. isExternalStorageEmulated : 设备的外存是否是用内存模拟的,是则返回true。(API Level 11)
7. isExternalStorageRemovable :设备的外存是否是可以拆卸的,比如SD卡,是则返回true。(API Level 9)

Context API中的目录

1. getExternalFilesDir : 是应用在外部存储上的目录.和Environment类的getExternalStoragePublicDirectory方法类似,返回包含参数指定的特定类型文件的子目录。
2. getExternalCacheDir()是应用的在外部存储上的缓存目录。

从Android 4.4这两个方法不需要读写权限,是针对于本应用来说,如果要访问其他应用的相关目录,还是需要声明读写权限。
Android 4.4之前的版本要访问的话还是要声明读写权限的,如果没有在manifest中写权限,上面两个get方法都会返回null。

与上面两个方法形成对比的是下面两个方法:
getFilesDir()
getCacheDir()
这些目录都是属于应用的,当应用被卸载的时候,里面的内容都会被移除,但是不要依赖于系统的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 保存文件 Android 使用与其他平台上基于磁盘的文件系统类似的文件系统。 本课程讲述如何使用 Android ...
    李建彪阅读 1,122评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,053评论 25 707
  • 手机存储分为三块区域1.内部存储2.SD卡存储(Primary External Storage)3.外置sd卡(...
    AaronXee阅读 1,894评论 0 1
  • 引言:文件存储[内部存储]和[外部存储]。SD 卡上的文件路径。时间:2017年06月17日作者:JustDo23...
    JustDo23阅读 734评论 0 4
  • 跳进回忆的河流 我要逆流而上 那么多我 迎面向我走来 我无处躲闪 笑盈盈的童年 皱着眉的少年 隐形的青春 那些我被...
    妮妮雅阅读 242评论 2 8