内部存储┐
系统存储├─物理位置是位于手机内部的非易失性存储器上,就是俗称的ROM
系统缓存┘
内存 ———物理位置是位于手机内部的随机存储器上,就是俗称的RAM
ROM相当于电脑硬盘,断电后依然能够保存资料
RAM相当于电脑内存,断电后资料丢失
而android系统是基于linux系统建立的,
她的分区结构跟windows不同,没有C盘D盘的,
系统存储是、系统缓存、内部存储分别都是不同的分区,
每个分区的大小是在系统建立的时候就分配好了的,一般人是无法更改的
就相当于系统存储是windows的C盘,系统缓存相当于windows的临时文件夹
内部存储就相当于windows的其他盘,
android系统中,
“/”以及“/system”等目录是用于系统存储的,(“/”是系统的根目录)
比如“/system/app”是指系统软件的存放目录
系统缓存是存放在"/cache"下的
内部存储一般是指用户可以使用的空间位于"/data"
内部存储和内置存储卡 是手机内部的ROM,只是把他分成2个区而已,就像电脑只有一个硬盘可以分成C、D、E、F盘,它是无法扩展的。
外置存储就是TF卡(内存卡),可以扩展
外部存储external storage和内部存储internal storage
1.内部存储:
注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(private),那么即使知道包名其他应用也无法访问。
内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。
使用内部存储
Android系统能够直接把文件存在设备的内部存储内。
默认情况下,保存在内部存储内的文件是应用程序私有的,其他应用程序(或用户)是无法访问的。
当用户卸载此应用程序时,内部存储的数据会一并清除。
- 往内部存储内写文件(写入到/data/data/com.xxx.xxx/files目录下,com.xxx.xxx为应用程序包名):
- 在内部存储内保存缓存文件(/data/data/com.xxx.xxx/cache/com.android.renderscript.cache目录下)
如果只是要缓存一些数据,而不是要持久的保存它,那么应该使用getCacheDir()方法来打开一个File对象,它代表了应用程序要保存临时缓存文件的内部目录。
2.外部存储:
最容易混淆的是外部存储,如果说pc上也要区分出外部存储和内部存储的话,那么自带的硬盘算是内部存储,U盘或者移动硬盘算是外部存储,因此我们很容易带着这样的理解去看待安卓手机,认为机身固有存储是内部存储,而扩展的T卡是外部存储。比如我们任务16GB版本的Nexus 4有16G的内部存储,普通消费者可以这样理解,但是安卓的编程中不能,这16GB仍然是外部存储。
所有的安卓设备都有外部存储和内部存储,这两个名称来源于安卓的早期设备,那个时候的设备内部存储确实是固定的,而外部存储确实是可以像U盘一样移动的。但是在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。所以不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机自带的存储(外部存储)。
- 往外部存储内写文件和删文件和判断文件是否存在(写入到/mnt/sdcard/Android/data/com.xxx.xxx/files目录下,com.xxx.xxx为应用程序包名):
外部存储中的文件是可以被用户或者其他应用程序修改的,有两种类型的文件(或者目录):
1.公共文件Public files:文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是由意义的,当应用被卸载之后,其卸载前创建的文件仍然保留。比如camera应用,生成的照片大家都能访问,而且camera不在了,照片仍然在。
2.私有文件Private files:其实由于是外部存储的原因即是是这种类型的文件也能被其他程序访问,只不过一个应用私有的文件对其他应用其实是没有访问价值的(恶意程序除外)。外部存储上,应用私有文件的价值在于卸载之后,这些文件也会被删除。类似于内部存储。
从log中我们可以看到外部存储根目录在我手机(nexus 3)上是/storage/emulated/0,奇怪的是在有些手机上同样的代码却是下面的情况:
部存储根目录为/mnt/sdcard.