由于中文翻译和表达的关系, Android中关于文件存储位置的有关词汇存在一些歧义, 同时也存在一些在PC上并不存在的概念. 为了便于查找, 下面先给出其中的各种位置的路径获取方法和一些对比. 之后对其中的一些概念和细节进行进一步的解释
各种存储位置的对比
名称 | 位置 | 获得方法 |
---|---|---|
内部存储 | /data/data/包名/files |
getFilesDir() |
外部存储的公共空间 | /storage/sdcard0 |
Environment.getExternalStorageDirectory() |
系统的外部公共空间 | /storage/sdcard0/类型名 |
Environment.getExternalStoragePublicDirectory(TYPE) |
外部存储的私有空间 | /storage/sdcard0/Android/data/包名/ |
getExternalFilesDir(TYPE) |
名称 | 卸载后是否清除 | 用户是否可见 | 其他程序是否可见 | 主要用途 |
---|---|---|---|---|
内部存储 | 是 | 否 | 否 | APP私有文件存放的位置 |
外部存储的公共空间 | 否 | 是 | 是 | 希望与用户和其他程序共享的位置 |
系统的外部公共空间 | 否 | 是 | 是 | 希望与用户和其他程序共享的位置 |
外部存储的私有空间 | 是 | 是 | 否 | 对其他程序没有作用的其他次要文件 |
注意
- TYPE指Environment中定义的常量, 例如Environment.DIRECTORY_DOCUMENTS
- 如果TYPE置为null, 则返回相应的根目录
几种方式的简要说明
内部存储
- 内部存储类似系统空间, 该位置对于非root用户不可见, 在此处创建的文件, 只有该APP可以进行读写
- 当APP被卸载的时, 此空间内的所有文件都会被删除
- APP有关的不需要共享的文件都可以存放在此文件夹中
外部存储的公共空间
- 外部存储的公共空间通常对应于手机存储, 此处可以存放任意文件, 用户和任何程序都可以对其中的文件进行读写
- 通常需要程序先创建一个文件夹, 之后在此文件夹中操作
- 当APP被卸载时, 此区域的文件不会被删除
- APP需要共享的文件存放在此处
系统的外部公共空间
- 系统的外部公共空间是指系统预先定义的一系列文件夹, 例如Document, Music等.
- 与外部存储的公共空间相比, 由于系统预先定义, 因此使用更加方便
- APP需要共享的文件存放在此处
外部存储的私有空间
- 外部存储的私有空间存在于外部存储, 但其又具有私有空间的性质, 限制了其他APP访问此区域的文件
- APP需要的大体积文件或其他次要文件存放在此处
外部存储与外置SD卡
对于系统而言, 只有内部存储和外部存储, 即无论内置SD卡还是外置SD卡, 都被视为外部存储, 但是由于使用外置SD卡的设备越来越少, 因此本文中不再讨论如何读写外置SD卡.
测试函数
以下提供一个函数, 用于测试有关存储空间的位置
1 | void test(){ |
参考文献和扩展阅读
彻底理解android中的内部存储与外部存储
Android中的内部存储与外部存储
android中的文件操作详解以及内部存储和外部存储
Android 漫游之路——将文件保存到内存、SD以及获取手机内部存储与外部存储空间的大小
最后更新: 2024年04月23日 00:19
版权声明:本文为原创文章,转载请注明出处
原始链接: https://lizec.top/2017/10/18/Android%E6%96%87%E4%BB%B6%E8%AF%BB%E5%86%99%E6%96%B9%E6%B3%95/