Android 中获取本地储存路径,有四个方法,
getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()。
接下来介绍下每个方法的特点以及路径地址
getCacheDir():/data/data/你的应用的包名/cache
getFilesDir():/data/data/你的应用的包名/files
getExternalFilesDir():SDCard/Android/data/你的应用的包名/files/
getExternalCacheDir():SDCard/Android/data/你的应用包名/cache/
从上文每个方法获取的路径中可以看出,getCacheDir()和getFilesDir()是获取手机自带的存储空间中的当前包文件的路径 ;
getExternalFilesDir()和getExternalCacheDir()是获取手机中SD卡的存储控件中的当前包文件的路径。
getCacheDir()
该目录主要用于存放缓存文件,当系统的内存存储空间紧张时,该目录下的文件会被删除掉。关于这些文件究竟会在存储空间剩余多少的情况,没有严格的标准保障。
注意:你不应该依赖系统来清理这些缓存文件,你应该对这些缓存文件占用的最大存储空间设定个最大值,比如是1M,当实际占用空间超过这个值时,你应该对这些缓存文件做相应的清理工作(prune)。
返回的路径可能会改变随着时间的推移,所以应该保存相对路径相对路径
getFilesDir()
1,openFileOutput() 方法存储的路径,跟getFilesDir() 返回的路径是同一个路径,换句话说:getFilesDir(),是获取openFileOutput() 方法的存储路径。
返回的路径可能会改变随着时间的推移,所以应该保存相对路径相对路径
2,不需要任何权限也可以访问
目录中的文件,会在卸载你的应用程序时被删除掉
getExternalFilesDir()
存储在SD卡中,和getFilesDir()类似;
该方法路径下系统不一定会自动删除文件,所以需要手动设置使用的大小
getExternalFilesDir()路径不一定可用,因为,sd卡可能被卸载
getExternalCacheDir()
存储在SD卡中,和getCacheDir类似;
该方法路径下系统不一定会自动删除文件,所以需要手动设置使用的大小
getExternalCacheDir()路径不一定可用,因为,sd卡可能被卸载
综上所述较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:
public String getDiskCacheDir(Context context) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}