1、介绍
Android系统分为内部存储和外部存储:
- 内部存储是手机系统自带的存储,一般空间都比较小
- 外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。
一般我们存储内容都会放在外部存储空间里。使用过程注意事项:
- 先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储
- 存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文件夹,区别是在SD卡的任意目录存放时内容不会随应用程序的卸载而消失,而在应用程序内部的内容会随应用程序卸载消失。
- 一般缓存文件放在应用程序内部,用户主动保存的文件放在SD卡上的文件夹里。如果在SD卡上任意新建目录存放所有数据,用户卸载时会残存大量文件,招致用户反感。
2、存储路径
一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。
2.1、内部存储
2.1.1、内部根目录
Environment.getDataDirectory() /data
2.1.2、内部应用程序目录
- 获取应用缓存目录:
Context.getCacheDir(): /data/data/包名/cache
- 获取应用文件目录
Context.getFilesDir(): /data/data/com.learn.test/files
Context.getFileStreamPath(""): /data/data/com.learn.test/files
Context.getFileStreamPath("test"): /data/data/com.learn.test/files/test
2.2、外部存储
2.2.1、判断sdCard是否存在
Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
2.2.2、外部根目录
Environment.getExternalStorageDirectory() /storage/emulated/0
2.2.3、外部应用程序目录
- 获取应用缓存目录
Context.getExternalCacheDir() /storage/emulated/0/Andorid/data/包名/cache
- 获取应用文件目录
Context.getExternalFilesDir(""): /storage/emulated/0/Android/data/com.learn.test/files
Context.getExternalFilesDir("test"): /storage/emulated/0/Android/data/com.learn.test/files/test
Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Android/data/com.learn.test/files/Pictures
- 获取外部公共存储目录
Environment.getExternalStorageDirectory(): /storage/emulated/0
Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0
Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Pictures
注:我们可以在外部存储上新建任意文件夹,不过6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失