上一篇文章已经讲了在Android内部中的数据又哪几种方式,至于与外部数据进行交互的方式与大家所了解的差不离,一般就是socket,http两种方式。今天重点讲讲Android中的文件存储。
Android的存储被分为了两部分,一部分为外部存储,一部分为内部存储。但是这里一定要记住,外部存储不仅仅指SD卡,手机内部本身就自带。
内部存储(internal ):存在此路径的文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。当一个应用卸载之后,内部存储中的这些文件也被删除,一般将敏感数据存储在此位置。内部存储一般用Context来获取和操作。
需要注意的是,如果对文件进行操作除了授权之外,必须在使用前判断文件路径是否存在。下面我们通过测试,将图片拷贝到通过getFileDir()指定的的文件路径中:
String filePath = this.getFilesDir() + "/wsytest/"; File file = new File(filePath);if(!file.exists()){ file.mkdir(); } Log.i("androidDirectory", this.getFilesDir().toString()); File filen = new File(filePath + mFileName);if(!filen.exists()){ filen.createNewFile(); } FileOutputStream fs = new FileOutputStream(filen); fs.write(data); fs.flush(); fs.close(); Log.i("androidDirectory", filePath + mFileName
+ " 文件是否存在:" + filen.exists());
得到的日志文件为:
/data/user/0/filetest.app.fieltest/files/wsytest/test.jpg 文件是否存在:true
但是我们通过连接360查看手机文件确在data目录下没有找到此jpg文件,甚至连文件夹目录都没有。但是我们的的确确通过代码得到的结果是文件确实存在的。所以此文件夹下的文件具有一定的安全性和保密性(针对未root的手机)。
外部存储(external ):一般存放时间较长,无敏感性的数据。在使用前需要判断存储状态。外部存储一般用Environment进行操作,不过在外部存储中又被分了两部分:
public类型:文件是可以被自由访问,且数据是有价值的数据,当软件被删除后,此部分不会被删除。
private类型:文件也可以被访问,但是数据是私有化的,对别的应用是无价值的数据,当软件被删除后,此部分也会被删除。使用Context.getExternalFilesDir(String type)创建。
我们通过测试,将图片拷贝到创建的private文件夹路径中:
String filePath = this.getExternalFilesDir(null).toString()+"/wsyteset/"; File file = new File(filePath);if(!file.exists()){ file.mkdir(); } Log.i("androidDirectory", this.getFilesDir().toString()); File filen = new File(filePath + mFileName);if(!filen.exists()){ filen.createNewFile(); } FileOutputStream fs = new FileOutputStream(filen); fs.write(data); fs.flush(); fs.close();
通过360查看手机文件,我们在/sdcard/Android/data/包名/files/下找到了创建的文件夹和文件。
了解Android文件存储的路径,对后期的软件升级、更新,文本的存储有很大的益处,希望通过这篇文章的讲解,能够让大家初步认识到Android中的外部存储和内部存储。
现在讲述的为Android系列,如果你觉得文章对你的学习有帮助,或者你也希望遨游在编程的世界,请长按下方图片并关注人人会编程!





