有时候应用程序需要保存一些数据,有如下选择:
1、保存到SD卡,有两种方式:
a、在SD卡的根目录下创建一个文件夹,用于保存数据,
b、获取
SDCard/Android/data/你的应用的包名/...目录,将数据保存在里边。
首先看a方式,这会使用到
Environment
类,
Environment 位于
android.os
包下,API解释为
Provides access to environment variables.
几个常用的方法,关于获取路径的(设备不同,获取到的值可能会有差异):
- <span style="background-color: rgb(255, 255, 255);">strPath1 = Environment.getRootDirectory().getAbsolutePath(); /system
- strPath2 = Environment.getDataDirectory().getAbsolutePath(); /data
- strPath3 = Environment.getDownloadCacheDirectory().getAbsolutePath(); /cache
- strPath4 = Environment.getExternalStorageDirectory().getAbsolutePath(); /storage/emulated/0
- strPath5 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
- /storage/emulated/0/Music
- strPath6 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
- /storage/emulated/0/DCIM</span>
- strState = Environment.getExternalStorageState(); mounted
- 外部存储的状态常用的有以下几个值:
- MEDIA_CHECKING 正在检查
- MEDIA_MOUNTED 已经挂载
- MEDIA_MOUNTED_READ_ONLY 已经挂载,只读
- MEDIA_REMOVED 被移除
- MEDIA_UNMOUNTABLE 无法挂载
- MEDIA_UNMOUNTED 没有挂载
- isRemovable = Environment.isExternalStorageRemovable(); false
... ...
b方式会用到以下方法:
- strCachePath = getExternalCacheDir().getAbsolutePath(); /storage/emulated/0/Android/data/com.hwgt.filepath/cache
- strFilePath = getExternalFilesDir(null).getAbsolutePath(); /storage/emulated/0/Android/data/com.hwgt.filepath/files
- strFilePath = getExternalFilesDir("test").getAbsolutePath();
- /storage/emulated/0/Android/data/com.hwgt.filepath/files/test
getExternalCacheDir()方法获取到的是
SDCard/Android/data/你的应用的包名/cache目录
getExternalFilesDir()方法获取到的是SDCard/Android/data/你的应用的包名/file目录
使用a和b两种方式的区别是:
使用a方式,当应用被卸载掉之后,SD卡中的数据不会被清除,会留下垃圾数据
使用b方式,
当应用被卸载掉之后,
SDCard/Android/data/你的应用的包名/这个目录都会被删除
并且,可以通过 设置-应用程序管理器-应用程序信息-清除缓存(清除数据)来清除
cache目录(
file目录
)的文件
当SD卡不可用时,使用下列方法:
- strCachePath = getCacheDir().getAbsolutePath(); /data/data/com.hwgt.filepath/cache
- strFilePath = getFilesDir().getAbsolutePath(); /data/data/com.hwgt.filepath/files