android 本地存储路径,Android本地存储路径学习

一、前言:

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卡的存储控件中的当前包文件的路径。

使用外部存储记得加上访问权限:

二、路径解析:

1. getCacheDir()

该目录主要用于存放缓存文件,当系统的内存存储空间紧张时,该目录下的文件会被删除掉。关于这些文件究竟会在存储空间剩余多少的情况,没有严格的标准保障。

注意:你不应该依赖系统来清理这些缓存文件,你应该对这些缓存文件占用的最大存储空间设定个最大值,比如是1M,当实际占用空间超过这个值时,你应该对这些缓存文件做相应的清理工作(prune)。

返回的路径可能会改变随着时间的推移,所以应该保存相对路径相对路径。

2. getFilesDir()

openFileOutput() 方法存储的路径,跟getFilesDir() 返回的路径是同一个路径,换句话说:getFilesDir(),是获取openFileOutput() 方法的存储路径。

返回的路径可能会改变随着时间的推移,所以应该保存相对路径相对路径

不需要任何权限也可以访问

目录中的文件,会在卸载你的应用程序时被删除掉

3. getExternalFilesDir()

存储在SD卡中,和getFilesDir()类似;

该方法路径下系统不一定会自动删除文件,所以需要手动设置使用的大小

getExternalFilesDir()路径不一定可用,因为,sd卡可能被卸载

4. 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;

}

三、代码解析:

1. 手机应用内置存储路径

getFilesDir().getAbsolutePath()

getFilesDir().getPath()

getCacheDir().getAbsolutePath()

getCacheDir().getPath()

实验代码:

String savePath5 = getFilesDir().getAbsolutePath();

String savePath6 = getFilesDir().getPath();

String savePath7 = getCacheDir().getAbsolutePath();

String savePath8 = getCacheDir().getPath();

Log.d(TAG,"save path5 --------->"+savePath5);

Log.d(TAG,"save path6 --------->"+savePath6);

Log.d(TAG,"save path7 --------->"+savePath7);

Log.d(TAG,"save path8 --------->"+savePath8);

打印结果:

tag:save path5 --------->/data/user/0/fxjzzyo.com.ffmpegtest/files

tag:save path6 --------->/data/user/0/fxjzzyo.com.ffmpegtest/files

tag: save path7 --------->/data/user/0/fxjzzyo.com.ffmpegtest/cache

tag: save path8 --------->/data/user/0/fxjzzyo.com.ffmpegtest/cache

结论:

getFilesDir()返回的是/data/user/0/包名/files这个文件夹,与应用的存在有关,当应用卸载时,里面的内容也同时被删除。

同理,getCacheDir()返回的是/data/user/0/包名/cache这个文件夹,与应用的存在有关,当应用卸载时,里面的内容也同时被删除。

另外,我这里的实验结果getAbsolutePath()和getPath()返回的路径是一样的,所以使用时不必纠结,我打算以后就用绝对路径getAbsolutePath()好了。

2. 手机外置sd卡存储路径

有两种获取方式,一种是获取到sd卡根目录,另一种是获取到应用相关的sd卡目录。

2.1 获取sd卡根目录路径

Environment.getExternalStorageDirectory().getAbsolutePath()

实验代码:

String savePath9 = Environment.getExternalStorageDirectory().getAbsolutePath();

String savePath10 = Environment.getExternalStorageDirectory().getPath();

Log.d(TAG,"save path9 --------->"+savePath9);

Log.d(TAG,"save path10 --------->"+savePath10);

打印结果:

tag: save path9 --------->/storage/emulated/0

tag: save path10 --------->/storage/emulated/0

结论:

Environment.getExternalStorageDirectory()获取的是sd卡的根目录文件夹,与应用无关,即使卸载了应用,里面的内容依然存在。

2.2 获取到应用相关的sd卡目录路径

getExternalFilesDir(null).getAbsolutePath()

实验代码:

String savePath = getExternalFilesDir(null).getAbsolutePath();

String savePath2 = getExternalFilesDir(null).getPath();

String savePath3 = getExternalCacheDir().getAbsolutePath();

String savePath4 = getExternalCacheDir().getPath();

Log.d(TAG,"save path --------->"+savePath);

Log.d(TAG,"save path2 --------->"+savePath2);

Log.d(TAG,"save path3 --------->"+savePath3);

Log.d(TAG,"save path4 --------->"+savePath4);

打印结果:

tag: save path --------->/storage/emulated/0/Android/data/fxjzzyo.com.ffmpegtest/files

tag: save path2 --------->/storage/emulated/0/Android/data/fxjzzyo.com.ffmpegtest/files

tag: save path3 --------->/storage/emulated/0/Android/data/fxjzzyo.com.ffmpegtest/cache

tag: save path4 --------->/storage/emulated/0/Android/data/fxjzzyo.com.ffmpegtest/cache

结论:

getExternalFilesDir(null)获取的是/storage/emulated/0/Android/data/包名/files这个文件夹,与应用有关,卸载了应用,里面的内容也没了。

同理,getExternalCacheDir()获取的是/storage/emulated/0/Android/data/包名/cache这个文件夹,与应用有关,卸载了应用,里面的内容也没了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值