内部存储有什么特点?
1、已APP的包名来作为目录;
2、只能自己APP才能访问该目录下的文件;
3、SharedP、SQLite文件都存储在该目录下;
4、文件操作只需要向函数提供文件名,所以程序自己只需要维护文件名即可;
5、不用自己去创建文件对象和输入、输出流,提供文件名就可以返回File对象或输入输出流;
6、对于路径操作返回的都是文件对象;
什么是外部存储?
在以前,手机有外置SD插槽,所以,有手机存储和外置SD存储,后来外置SD插槽在一些手机中被取消,因此,这些手机就把自带的存储划分为逻辑上的内部存储、外部存储;
外部存储类型有哪些?
私有文件Private files:其实由于是外部存储的原因即是是这种类型的文件也能被其他程序访问,只不过一个应用私有的文件对其他应用其实是没有访问价值的(恶意程序除外)。外部存储上,应用私有文件的价值在于卸载之后,这些文件也会被删除。类似于内部存储;
public File getAlbumStorageDir(Context context, String albumName) {
// Get the directory for the app's private pictures directory.
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName);
if(!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
returnfile;
}
所有应用程序的外部存储的私有文件都放在根目录的Android/data/下,目录形式为/Android/data/<package_name>/,如果你的api 版本低于8,那么不能使用getExternalFilesDir(),而是使用Environment.getExternalStorageDirectory()获得根路径之后,自己再想办法操作/Android/data/<package_name>/下的文件。也就是说api 8以下的版本在操作文件的时候没有专门为私有文件和公共文件的操作提供api支持。你只能先获取根目录,然后自行想办法。
个人测试
手机型号:红米note2
安卓版本:Android 5.0.2
存储情况:
有一个8G的外置SD
手机自带16G存储,但在“文件管理”中显示能用的就12.53G,说明,接近3G手机自带存储作为了内置存储
打印日志:
getFilesDir()=/data/data/cn.gov.pbc.identityauthentication.client.mobile.android/files
手机自带16G的内部存储
getExternalFilesDir("test")=/storage/emulated/0/Android/data/cn.gov.pbc.identityauthentication.client.mobile.android/files/test
手机自带16G的路径
Environment.getDownloadCacheDirectory()=/cache
手机自带16G的路径
Environment.getDataDirectory()=/data
手机自带16G的路径
Environment.getExternalStorageDirectory()=/storage/emulated/0
手机自带16G的路径
Environment.getExternalStoragePublicDirectory("test")=/storage/emulated/0/test
手机自带16G的路径
这说明:在我这个手机中所谓的内置存储、外置存储,都是手机自带的16G存储

被折叠的 条评论
为什么被折叠?



