Android学习笔记之五种存储方式

Android中的五种存储方式和各自的特点

(这是我看官方API作的笔记)

一:简介

内置硬盘:需要自己控制内置硬盘缓存文件

外置硬盘:手机共享的文件,例如照片

Shared preferences:以键值对的方式保存私有的数据,存储简单的键值对xml,可以存储boolen float int long string类型

Database:保存有规模的私有数据库,推荐使用Room persistence library

除了硬盘的数据,其他的方式都是为了存储私有的数据,ContentProvider可以用来控制数据的权限.


二.具体内容

1.硬盘

    1).内置硬盘和外置硬盘的区别:

        内置硬盘:一直都是存在的,文件只能被当前的app获取,卸载APP的时候会删除

        外置硬盘:不一定一直是存在的,共享读取的,如果使用getExternalFilesDir() 获取存储路径卸载APP的时候会顺带删除

        APP的安装路径默认是内置硬盘,但是也可以指定到外置硬盘,通过在manifest 文件中指定Android:installLocation

 

    2).内置硬盘:

        在内置硬盘中保存文件的路径是由app的包名决定的,而且保存在Android 件系统中一个特定的位置.

            getFilesDir():获取app内置硬盘的一个路径

            getCacheDir():获取暂存文件路径,需要控制在不需要的时候删除给定的 文件,并且创建文件的时候一定要制定一个size限度.

        创建文件的时候,可以使用File()构造函数,新建一个file,指定路径和名称.

            File file = new File(this.getFilesDir(),filename);

        也可以使用openFileOutput()方法打开一个输出流,app中输出文件到指定 的路径并规定文件名,这个方法自动输出到内置硬盘的app路径,这一点可 以从Context.java类以及中看出.返回的是当前Context的路径.

                

                String fileName=”text.txt”;

                String fileContent=”Hello World!”;

                FileOutPutStream fos;

                try{

                    fos = openOutPut(fileName,Context.MODE_PRIVATE);

                    fos.write(fileContent.getBytes());

                    fos.close();

                }catch(Exception e){

                    e.printStrackTrace();

                }

                注意此处的在7.0以上的版本中不存在Context.MODE_PRIVATE之外的 其他权限了.



        内置硬盘缓存文件:

            通过createTempFile()创建

            public void setTempFile(Context context, String uri){

            File file;

            try{

            String fileName = uri.parse(url).getLastPathSegment();

            file = 	File.createTempFile(filename,null,context.getCacheDir());

            }catch(Exception e){

            e.printStackTrace();

                }

            }

            在读取临时文件前需要检测是否存在,存储空间不足时会自动删除临时文件. 且在使用过后应当立即删除.

            打开文件:

            openFileInput(name);APP安装的时候就可见的文件可以存放在 res/raw/当中.

            getFileDir()/getDir(name,mode)/getCacheDir():都是在当前app的路径 下进行的路径的相关操作


    3).外置硬盘

            外部硬盘:

            在外部硬盘存放文件需要两个准备:

            1. 请求权限

            2. 确认存储区域是可用的

            Android4.4以及更高不需要读写权限,以下的需要权限,需要在Manifest文件 中获取权限后加上最高sdk的属性

            <user-permission android:name=”......”

             android:maxSdkVersion=”18”/>

            确认可用:

            if(Environment.getExternalStorage().equals(Environment.MEDIA _MOUNTED);

 

            保存文件到公共路径:

            使用getExternalStoragePublicDirectory(),这个方法需要指定保存文件 的类型.

 

            File file = new  File(Environment.getExternalStoragePublicDirectory(Environmen t.TYPE),fimeName);

            使用隐藏文件”.name”,可以避免被找到.

 

            保存到私有路径:

            getExternalFilesDir()

            选择多重的存储位置

            API19 getExternalFilesDirs();

            ContextCompat.getExternalFilesDirs();

            查询空闲的空间:

            getFreeSpace()/getTotalSpace().

 

            删除文件:

            delete();



-----------------------------未完-------------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值