Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

一、Android存储——持久化技术
数据持久化是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或者电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换
Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储SharedPreference存储以及数据库存储。除此之外,还有两种常用的存储方式为Content Provider方式存储以及网络存储。
在这里插入图片描述

二、文件存储
文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中,因而其比较适合用于存储一些简单的文本数据或二进制数据。
如果使用文件存储的方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,方便之后将数据从文件中重新解析出来。

  1. 将数据存储到文件中
    Context类中提供了一个openFileOutput()方法,可用于将数据存储到指定文件中,该方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的为该名称,注意这里指定的的文件名不包含路径,因为所有文件都是默认存储到/data/data//files/目录下的。第二个参数为文件的操作模式。
    操作模式有四种:MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件内容MODE_APPEND则表示如果该文件存在,就往文件里面追加内容,不存在就创建新文件;MODE_WORLD_READABLE表示允许其他的应用程序对本程序中的文件进行读操作;MODE_WORLD_WRITEABLE表示允许其他应用程序对本程序的文件进行写操作。
    将数据保存到文件中的例子如下。
    在这里插入图片描述
  2. 从文件中读取数据
    Context类中提供了一个openFileInput()方法,用于从文件中读取数据。其只接受一个参数,即要读取的文件名,系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象。如下所示为从文件中读取数据的例子。
    在这里插入图片描述
  3. 指定存储路径
    以上的存储和读取数据的方式中,都是通过Context中提供了的方法openFileOutput()和openFileInput()在指定的文件路径/data/data//files/目录下进行存储和读取。那么如何将数据存储到指定的路径?
    在这里插入图片描述
    首先需要了解一下内部存储和外部存储的区别。
    内部存储并不是内存,而是位于系统中很特殊的一个位置,如果将文件存储于内部存储中,那么文件默认只能被本应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。应用创建于内部存储的文件,与这个应用是关联的,当该应用被卸载之后,内部存储中的这些文件也被删除
    外部存储在目前的手机中可能会令人疑惑,区别电脑手机的外部存储分为两个部分,一个是机身存储的外部存储部分,还有一个是SD卡部分。通常能够在手机端访问的文件路径即为机身存储的外部存储部分,一般内部存储部分是不可见的(可以通过Android Studio访问)。
    访问内部存储的API方法:
    Environment.getDataDirectory()
    getFilesDir().getAbsolutePath()
    getCacheDir().getAbsolutePath()
    getDir(“myFile”, MODE_PRIVEATE).getAbsolutePath()
    得到的path会因Android版本的不同而不同。指定文件路径进行存储的方法其实就是使用Java的IO流进行文件存储,唯一需要注意的是当指定的路径上的文件夹不存在的时候,需要使用mkdir()方法进行创建,Android不会自动创建。
    在这里插入图片描述

三、Content Provider方式存储*
一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去,外界可以通过这一套标准以及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然中间也会涉及到一些安全问题。
关于Content Provider的使用,参看笔记:Android基础知识(十七):Content Provider

四、网络存储*
通过网络的HTTP POST的方式发送数据,并存储到对应的服务中,在需要的时候,通过URL请求从服务获取数据。

参考资料:《第一行代码 Android 第2版》
Android之四大组件、六大布局、五大存储

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89634028