转自https://www.jianshu.com/p/0a18691e410a

在android开发中我们常常听到这样几个概念,内存,内部存储,外部存储,很多人常常将这三个东西搞混,那么我们今天就先来详细说说这三个东西是怎么回事?

内存,我们在英文中称作memory,内部存储,我们称为InternalStorage,外部存储我们称为ExternalStorage,这在英文中本不会产生歧义,但是当我们翻译为中文之后,前两个都简称为内存,于是,混了。

1.内部存储:

注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(private),那么即使知道包名其他应用也无法访问。内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。

2.外部存储:

最容易混淆的是外部存储,如果说pc上也要区分出外部存储和内部存储的话,那么自带的硬盘算是内部存储,U盘或者移动硬盘算是外部存储,因此我们很容易带着这样的理解去看待安卓手机,认为机身固有存储是内部存储,而扩展的T卡是外部存储。比如我们任务16GB版本的Nexus 4有16G的内部存储,普通消费者可以这样理解,但是安卓的编程中不能,这16GB仍然是外部存储。

所有的安卓设备都有外部存储和内部存储,这两个名称来源于安卓的早期设备,那个时候的设备内部存储确实是固定的,而外部存储确实是可以像U盘一样移动的。但是在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。所以不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机自带的存储(外部存储)。

外部存储虽然概念上有点复杂,但也很好区分,你把手机连接电脑,能被电脑识别的部分就一定是外部存储。

一般来说,我们不会自己去操作内部存储空间,没有root权限的话,我们也没法操作内部存储空间,事实上内部存储主要是由系统来维护的。不过在代码中我们是可以访问到这个文件夹的。由于内部存储空间有限,在开发中我们一般都是操作外部存储空间。

Google官方建议我们App的数据应该存储在外部存储的私有目录中该App的包名下,这样当用户卸载掉App之后,相关的数据会一并删除,如果你直接在/storage/sdcard目录下创建了一个应用的文件夹,那么当你删除应用的时候,这个文件夹就不会被删除。

一目了然,什么是内部存储,什么是外部存储。

如果按照路径的特征,我们又可以将文件存储的路径分为两大类,一类是路径中含有包名的,一类是路径中不含有包名的,含有包名的路径,因为和某个App有关,所以对这些文件夹的访问都是调用Context里边的方法,而不含有包名的路径,和某一个App无关,我们可以通过Environment中的方法来访问。如下图:

大家看到,有包名的路径我们都是调用Context中的方法来获得,没有包名的路径,我们直接调用Environment中的方法获得,那么其中有两个方法需要传入一个String类型的参数,这个参数我们使用了Environment中的常量,参数的意思是我们要访问这个路径下的哪个文件夹。

说到这里,我想大家对内部存储、外部存储该有了一个清晰的认识了吧。我们在开发中,不建议往内部存储中写太多的数据,毕竟空间有限。外部存储在使用的时候最好能够将文件存放在私有目录下,这样有利于系统维护,也避免用户的反感。

当我们点击清除数据的时候清除的是哪里的数据呢?毫无疑问,当然是内部存储目录中相应的files和cache文件夹中的文件和外部存储中相应的files和cache文件夹中的文件,至于这些文件夹的路径我想你应该已经明白了。

本文摘自:

彻底理解android中的内部存储与外部存储 – Android开发中文站

blog.csdn.net/androidwifi…

转载于:https://juejin.im/post/5ca2f67df265da30a857c404

安卓-内部存储、外部存储目录相关推荐

  1. HDU-安卓程序开发之简单存储/内部存储/外部存储 捉虫

    前言 大三上学期可以说是各工科学生课最难最多的一学期了,又因下学期大家普遍需要找工作,所以都压力比较大吧- 安卓作为我本学期选的五门专业课中学的最认真的(因为每周都有布置作业),所以我对它相对比较了解 ...

  2. Android 数据存储---外部存储(SD卡)

    使用外部存储实现数据持久化,这里的外部存储一般就是指的是sdcard.使用sdcard存储的数据,不限制只有本应用访问,任何可以有访问Sdcard权限的应用均可以访问,而Sdcard相对于设备的内部存 ...

  3. Android 8.0 中如何读取内部和外部存储以及外置SDcard

    最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下.在Android 8.0上做了测试. 一般的Android App能读取的存储空间主要有三种: app ...

  4. Android开发中内存、内部存储、外部存储详解

    手机是有两个内存的.2G和16G同时出现在一个手机中,2G是指运行内存,16G是指存储内存. 手机的内存,分两种,一个是存储内存,相当于电脑的硬盘,一般手机参数里超过4G的都是指这个.存储内存是可以扩 ...

  5. android 源码分析 内置 sd storage,Android开罐头———外部存储与内部存储完全解析...

    context.getExternalFilesDir(),Environment.getExternalStorageDirectory(),傻傻分不清?到底什么算安卓手机的external sto ...

  6. android internal storage 路径,内部存储InternalStorage和外部存储ExternalStorage-Android

    > 一个是清除缓存,另一个是清除数据;内部存储InternalStorage,外部存储ExternalStorage 彻底理解android中的内部存储与外部存储- http://blog.cs ...

  7. java 访问手机存储卡,Android App将数据写入内部存储和外部存储的示例

    File存储(内部存储) 一旦程序在设备安装后,data/data/包名/ 即为内部存储空间,对外保密. Context提供了2个方法来打开输入.输出流 FileInputStream openFil ...

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

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

  9. android以ini文件形式保存在内部存储_彻底了解android中的内部存储与外部存储

    打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的时候又是清除的哪里的数据?读 ...

  10. Android—内部存储与外部存储、保存图片到相册

    内部存储: 当一个应用卸载之后,内部存储中的这些文件也被删除.在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(p ...

最新文章

  1. Go借助PProf的一次性能优化
  2. Redis【3】其他部分~
  3. 搭建jenkins+gitlab+tomcat+maven步骤
  4. Angular6_服务端渲染SSR
  5. PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)
  6. JavaScript状态2018
  7. devops_DevOps适合所有人
  8. JPBC Element传输
  9. 如何增加无人机的飞行时间和升力?
  10. ITF跆拳道中的基本腿法(图文)
  11. Mysql 实现多种逻辑删除方案
  12. 顶刊实证复现!排污权交易机制是否提高了企业全要素生产率 ——来自中国上市公司的证据
  13. DA1458x SDK Software Layout 随笔
  14. 坦克大战项目c语言代码,c语言 坦克大战 游戏源码下载
  15. apex版本控制_适用于数据库开发和管理的优秀SQL Server工具
  16. P1455 搭配购买
  17. 【Python爬虫学习】七、淘宝商品价格爬取(成功爬取)
  18. 手机的IMEI、MEID、ICCID、UDID、IMSI
  19. 计算机加分乘法套用,8+8+8+8+8写成乘法算式要怎样写?小学数学为何这么死板?...
  20. 第六章-数据库与Access

热门文章

  1. 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(3)
  2. 继Spring 会议个人计划统计(补)
  3. thinkphp __hash__
  4. POJ 1089 Intervals 区间覆盖+ 贪心
  5. 奥运22日看点:女乒女曲有望夺金 皮划艇全线出击
  6. vue-amap详细使用教程
  7. 隐马尔可夫的知识要点
  8. 修改MySQL数据库最大连接数的两种方法
  9. IDEA 导入cordova3.5工程目录注意事项
  10. 你绝没用过的一款高逼格空间可视化工具