Android的数据存储方式---内部存储与外部存储
一、内部存储
默认情况下,只有自己的应用才可以读取自己的数据。
内部存储方式存储的路径在:/data/data/包名/cache目录下,或者/data/data/包名/files目录下。两者的区别是,当系统内存不足时,cache目录下保存的文件信息会被清理掉,而files目录下的文件不会被清理掉。
内部存储的存储方式使用IO流来操作
比如:在登陆界面上需要将用户输入的登陆名和密码保存在指定的内部存储文件下,操作的步骤为:
另外,由于上面写的指定内部存储路径的方式容易出错,Android为我们提供了简便的方式用来指定内部存储文件的路径:
this.getCacheDir()和this.getFilesDir(),这两个方法分别用来指定cache目录下的文件和files目录下的文件。
如果将上述操作的指定路径换成getFilesDir()可以写为:
在DDMS中的data/data/包名/files目录下可以查看保存好的数据文件,如下图:
同理,如果是以this.getCacheDir()方法指定文件的保存路径,就会在/data/data/包名/cache/目录下看到保存的文件。
二、外部存储---SD卡
在eclipse环境下
外部存储的存储路径是/mnt/sdcard还是/storage/sdcard,具体要看你自己电脑上DDMS里面是怎样指向的。打开你的DDMS,查看sdcard的指向,如下图:
查看后发现我自己电脑上sdcard指的路径是/storage/sdcard/,所以后面用的存储文件的路径就知道了,还是以上面的登陆案例的保存用户名和密码为例,
另外,对sd卡进行读写是需要权限的,应该在AndroidManifest.xml中加入相应的权限,如下图所示:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>如果运行程序出现下图所示的错误,说明你没有添加相应的权限。
Android studio环境下
Android studio环境下,Android7.0系统的模拟器无法正常查看File Explorer中的内容,所以使用时应该创建一个Android 6.0系统的模拟器。
对sd卡操作同样需要在AndroidManifest.xml文件中声明用户权限,并且如果在6.0及以上系统使用危险权限时必须进行运行时权限处理。
查看Android studio环境下DDMS中的sdcard指定情况,如下图:
从图中可以看出首先从1指到2,从2指到3,从3指到最终的存储地方,即/storage/emulated/0目录下,所以如果向sdcard中放置文件需要在此目录下操作。