美文网首页
关于手机存储

关于手机存储

作者: 路小茜 | 来源:发表于2020-08-10 16:10 被阅读0次

    文章参考链接https://blog.csdn.net/wulex/article/details/72899363

    我们平时说的手机内存包括两种:运行内存(RAM)和存储内存(ROM)。

    运行内存相当于电脑的内存条,是不能扩展的。可以在设置-关于手机中看到,可能是2G,4G,或者8G。

    存储内存相当于电脑的硬盘,是可以扩展的,如果手机可以插内存卡就可以扩展,不过现在随着手机的发展内置的内存已经够用,手机厂家也不再提供安装sd卡的位置。

    我们来思考一个问题:打开手机设置,应用管理,任意的一个app,都有两个按钮,一个是清除缓存,一个是清除数据。那么这两个按钮分别清除的是那里的数据呢?

    在Android 开发中我们经常听说几个概念,内存,内部存储,外部存储。什么是外部存储呢?

    Android studio打开device File Explorer,可以看到如下目录:

    我们主要关注三个文件夹:data,mnt,storage。

    1. 内部存储

    data文件夹就是我们常说的内部存储,打开data文件夹(没有root的手机不能打开该文件夹)下内容如下图

    这里有两个文件夹,app文件夹和data文件夹,app文件夹里存放的是安装的app的apk文件,data文件夹下存放我们使用SharedPreferenced时候将数据持久化存放在本地;数据库文件也存储在这里;普通数据存放在File文件里;缓存文件存储在cache文件夹里。存储在这里的文件我们都称为内部存储。

    2. 外部存储

    我们平时操作最多的就是外部存储,就是上面说的storage文件夹,也有部分厂家是mnt文件夹中。

    一般来说,在storage文件夹中有一个sdcard文件夹,这个文件夹中的文件分为两类,一类是公有目录,一类是私有目录。公有目录有九大类,比如DCIM、Download等这种系统为我们创建的文件夹,私有目录是android这个文件夹,这个文件夹打开只有里面有一个data文件夹,打开这个data文件夹,里面有许多报名组成的文件夹。

    3.操作存储空间

    接下来我们来学习怎样操作内部存储和外部存储。

    一般情况下我们不会去操作内部存储空间,手机没有root的情况下也操作不了,事实上手机内部存储空间是由系统来维护的。不过我们在代码中是可以访问到这个文件夹的。因此我们一般操作的都是外部存储空间。Google官方建议我们APP的数据应该存储在外部存储的私有目录中该APP的包名下,这样当用户在卸载APP的时候就会将所有数据一起删除,如果直接在/storage/sdcard目录下创建了一个应用的文件夹,那么当删除这个应用的时候这个文件夹就不会被删除。

    经过上面的介绍,我们可以总结出下面的一个表格:

    如果按照路径的特征,我们又可以将文件存储的路径分为两类:包含包名和不包含包名。含有包名的路径,因为和某个APP有关,所以对这些文件夹的访问都是调用Context里边的方法;不包含包名的路径,和APP无关,可以通过Environment中的方法来访问。如下图:

    可以看到,有包名的路径我们都是调用Context中的方法来获得,没有包名的路径直接调用Environment中的方法获得。其中有两个方法需要传入一个String类型的参数,这个参数使用了Environment中的常量,参数的意思是我们要访问这个路径下的哪个文件夹,比如getExternalFileDir方法,源码如下:

    这是其中的一部分常量,我们可以访问file文件夹下的Music文件夹、Movie文件夹等。

    现在我们再来看看我们一开始提出的问题,当我们点击清除数据的时候清除的是哪里的数据呢?答案就是内部存储中的files和cache文件夹中的文件和外部存储中相应的files和cache文件夹中的文件。

    手机内存的官方路径是 

    String path=Environment.getExternalStorageDirectory().getAbsolutePath();

    4. Android数据访问存储之内存读写

    Android数据存储之内存读写的两大内存

    1)手机内存数据读写

    getFileDir( ) : 得到当前app在手机内存存储数据的位置 /data/data/当前app包名/files

    getCacheDir( ) : 得到当前app在手机内存存储数据的位置/data/data/当前app包名/cache

    openFileInput(String name) : 直接得到/data/data/当前app包名/files/name文件的输入流

    openFileOutput(String name,int mode) : 直接得到/data/data/当前app包名/files/name文件的输出流,mode为写入文件时的权限

    2)sdcard数据读写

    Environment.getExternalStorageDirectory( ) : 得到当前app所在手机的sdcard位置/storage/sdcard

    Environment.getExternalStoragePublicDirectory(String type) : 得到当前app所在手机的sdcard位置下的公共子文件夹/storage/sdcard/…

    相关文章

      网友评论

          本文标题:关于手机存储

          本文链接:https://www.haomeiwen.com/subject/sjaddktx.html