安卓手机的存储分为 2 部分,内部存储 ( Internal ) 和外部存储
( External )
内部存储指的是系统存储空间,需要root权限才能访问,像SharedPreferenced和DataBase的数据都是保存在这里面
一、外部存储分为两部分
1.机器自带的存储,也就是常说的16G,32G,64G
2.SD卡(TF卡)
二、详细分析
1.Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别
2.4.4以前,内置存储就是内部存储,外置SD卡就是外置存储。我们通过getDataDirectory()就可以获取内置存储根路径,通过getExternalStorageDirectory()就可以获取外置SD卡根路径。
4.4以后外部存储就包含两部分了,其中通过getExternalStorageDirectory获取的是机身存储的外部存储,而外置SD卡我们则需要通过getExternalFilesDir()遍历来获取了。
三、Internal Storage(内部存储)
空间很小,所以应该正确的使用它,因此用于保存一些重要的数据库文件以及一些用户的配置文件。
内部存储的路径:/data/data/0/packagename/files
1.files目录
getFileDir()
/data/data/packageName/files/
2.内部缓存目录
getCacheDir()
/data/data/packageName/cache/
3.配置文件
getDir(“fileName.txt”,Context.MODE_PRIVATE)
/data/data/packageName/app_fileName.txt
app_是系统自己加上去的
四、External Storage(外部存储)
1.概念
最容易混淆的是外部存储,因为老的Android系统的跟新的Android系统是有差别的,很多人去网上查找资料,看了一下以前的资料,又看了一下现在的资料,但是发现它们说法不一样然后就困惑了。首先说一个大家普遍的概念“如果在pc机上是区分外部存储和内部存储的话,那么电脑自带的硬盘算是内部存储,U盘或者移动硬盘就是外部存储了。”因此很多人带着这样的理解去看待安卓手机,把内置存储(机身存储)当做内部存储,而把扩展的SD卡当做是外部存储。
这么认为确实没错,因为在4.4(API19)以前的手机上确实是这样的,手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储。但是从4.4的系统开始,很多的中高端机器都将自己的机身存储扩展到了8G以上,比如有的人的手机是16G的,有的人的手机是32G的,但是这个16G,32G是内部存储吗,不是的!!!,它们依然是外部存储,也就是说4.4系统及以上的手机将机身存储存储(手机自身带的存储叫做机身存储)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。既然16G,32G是外部存储,那有人又有疑惑了,那4.4系统及以上的手机要是插了SD卡呢,SD卡又是什么呢,如果SD卡也是外部存储的话,那怎么区分机身存储的外部存储跟SD卡的外部存储呢?对,SD卡也是外部存储,那怎么区分呢,在4.4以后的系统中,API提供了这样一个方法来遍历手机的外部存储路径
File[] files;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
for(File file:files){
Log.e("main",file);
}
}
操作外部存储必须的权限(当你申请了write权限,那么read权限默认也就通过啦)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
状态判断
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState)){
//SD卡已挂载
}
而外部存储又分为公有目录和私有目录
2.外部存储公有目录
当我们删除应用之后,还应该保留在手机上的数据,例如拍照的照片,不应该随着删除应用而被删除掉。对于这类文件,Android给我们提供了特定的目录,这些目录都是以DIRECTORY开头的,例如:DIRECTORY_MUSIC , DIRECTORY_PICTURES.
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
/storage/emulated/0/Pictures
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
/storage/emulated/0/Music
3.外部存储的根目录
Environment.getExternalStorageDirectory()
/storage/emulated/0
4.外部存储私有目录
Android 4.4以后访问该目录不再需要权限
5.files目录
getExternalFilesDir(String type)
/storage/emulated/0/Android/data/<包名>/files/
6.缓存目录
getExternalCacheDir()
/storage/emulated/0/Android/data/<包名>/cache
五、/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系
最后
如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。感兴趣的小伙伴可以点一下关注哦。谢谢!
网友评论