Android开发之数据的存储方式详解

在Android中,数据的存储分为两种方式:

1、直接以文件的形式存储在目录中

2、以json格式存储在数据库中

将数据以文件的存储又分为两种方式:

1、生成.txt文件

2、生成xml文件

那么今天就来详细的说一下以文件的形式存储,由于没有讲到数据库,在之后的课程中会讲到json格式存储在数据库中。

一、生成.txt文件

文件的生成无非就是我们Java中学习的输入输出流中的一部分,有Java基础相信都是很容易理解的,因为它真的很简单啦~~

1、生成目录可以分为两种:

1)本机

2)SD卡

2、生成.txt文件的方式又可以分为4种

1)使用MODE_PRIVATE模式,生成一个私有的文件

2)使用MODE_PRIVATE模式,生成一个appent文件

3)使用MODE_WORLD_READABLE模式,生成一个readable文件

4)使用MODE_WORLD_WRITEABLE模式,生成一个writeable文件

在生.txt文件之前,我们有必要先了解一下文件的权限,如下图:

1、第一格:表示文件的类型

2、第2-4格:表示当前用户拥有的权限

3、第5-7格:表示当前用户所在组拥有的权限

4、第8-10格:表示其他用户拥有的权限

5、"r":表示可读;"w":表示可写;"x":表示可执行;"-":表示什么权限也没有,如果看到"rwx"就表示可读可写可执行,其他组合亦是如此

注意:不同的模式生成的文件的权限是不一样的,以及生成文件的类型的权限也是不一样的。

那么下面就详细的来说一下这几种方式

1、如图所示,当我们点击button按钮时触发文件的监听,这里的按钮就是简单的按钮,但是要记得设置onclick点击事件的属性哦~大家都不傻是吧…………

1)使用MODE_PRIVATE模式,生成一个私有的文件

//点击按钮1,使用MODE_PRIVATE模式,生成一个私有的文件
  public void click1(View v){
    try {
      FileOutputStream fos = openFileOutput("private.txt", MODE_PRIVATE);
      fos.write("private".getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

2)使用MODE_PRIVATE模式,生成一个appent文件

//点击按钮2,使用MODE_PRIVATE模式,生成一个appent文件
  public void click2(View v){
    try {
      FileOutputStream fos = openFileOutput("appent.txt", MODE_PRIVATE);
      fos.write("appent".getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

3)使用MODE_WORLD_READABLE模式,生成一个readable文件

//点击按钮3,使用MODE_WORLD_READABLE模式,生成一个readable文件
  public void click3(View v){
    try {
      FileOutputStream fos = openFileOutput("readable.txt", MODE_WORLD_READABLE);
      fos.write("readable".getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

4)使用MODE_WORLD_WRITEABLE模式,生成一个writeable文件

 //点击按钮4,使用MODE_WORLD_WRITEABLE模式,生成一个write文件
  public void click4(View v){
    try {
      FileOutputStream fos = openFileOutput("writeable.txt", MODE_WORLD_WRITEABLE);
      fos.write("writeable".getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

部分代码说明

FileOutputStream: 文件输出流

openFileOutput("private.txt", MODE_PRIVATE):openFileOutput是Android中封装好的文件输出流,private.txt就是生成的文件名,MODE_PRIVATE这个就是上面说到的模式啦!

fos.write("private".getBytes()):write就是写入什么内容,这里的参数就是你要写入的文本内容,getBytes()………………^_^不知道自己去看Java基础吧哈哈哈~~~

close():关闭流对象

try-catch:有异常,try一下……

MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE:这两个模式已经被废弃了……没有那么多为什么!哈哈哈……

感觉自己萌萌哒……实在不会的就复习Java基础吧!

那么这里就生成了如下图所示的4个文件

2、将文件存储在SD卡

1、获取SD卡的路径:

String sdPath = Environment.getExternalStorageDirectory().getPath() ;

2、添加路径

File file = new File(sdPath + "writeable.txt");

然后将路径写成这个就好了!就是这么简单

3、读取刚才写入的文件

在读取文件内容的时候,你写入的路径是什么,那么读的时候路径就是什么

try {
      //File file = new File("/data/data/com.test.filereadwrite/files/readable.txt");
      File file = new File("/data/data/com.test.filereadwrite/files/writeable.txt");
      FileInputStream fis = new FileInputStream(file);
      BufferedReader bffr = new BufferedReader(new InputStreamReader(fis));
      String content = bffr.readLine();
      Toast.makeText(MainActivity.this, content, 2000).show();
    } catch (Exception e) {
      e.printStackTrace();
    }

4、路径优化

大家偶发现了我这里是直接写的路径,那么这样写并不是最优化的,那么要怎么才是更优化的呢,那么久只要改两行代码就好啦,例如:

1、获取路径:

String path = Context.getFilesDir().getPath();

2、添加路径:

File file = new File(path + "writeable.txt");

注意:我们写的路径都应该是用优化的这种方式,而不应该写死,在这里我为了杀鸡儆猴哈哈哈~所以就写死了……但是效果都是一样的哇~~

二、生成xml文件

生成xml文件又可以分为两种方式:

1、使用原生StringBuffer拼接xml文件

2、使用Android封装好的XmlPullParser类

两种方式生成的xml文件是一样的,但是个人比较喜欢第二种方式,因为简单,就是简单,简单到Google工程师在开发文档中都不用写实例代码……

在生成xml之前,大家先不要忘记了写一个实体类,不然你怎么封装数据?告诉我怎么封装…………

那么我们这里就直接上代码了(实体类自己写……)

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //初始化我们要备份的数据
    smsLists = new ArrayList<Sms>();

    //插入测试数据
    for (int i = 0; i < 10; i++) {
      Sms sms = new Sms();
      sms.setAddress("10086"+i);
      sms.setBody("你好"+i);
      sms.setDate("201"+i);
      //把sms对象加入到集合中
      smsLists.add(sms);
    }
  }

1、使用原生StringBuffer拼接xml文件

//点击按钮button1,通过StringBuffer的方式生成一个xml文件
  public void click1(View v){
    //1创建一个StringBuffer对象
    StringBuffer sb = new StringBuffer();

    //开始组拼xml文件头
    sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    //开始组拼xml根节点
    sb.append("<smss>");
    //开始组拼sms节点以及子节点
    for (Sms sms : smsLists) {
      sb.append("<sms>");

      //组拼addressa节点
      sb.append("<address>");
      sb.append(sms.getAddress());
      sb.append("</address>");

      //组拼body节点
      sb.append("<body>");
      sb.append(sms.getBody());
      sb.append("</body>");

      //组拼date节点
      sb.append("<date>");
      sb.append(sms.getDate());
      sb.append("</date>");

      sb.append("</sms>");
    }

    //smss节点结束
    sb.append("</smss>");

    //把数据保存到SD卡中
    try {
      File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
      FileOutputStream fos = new FileOutputStream(file);
      fos.write(sb.toString().getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    } 

  }

2、使用Android封装好的XmlPullParser类

//点击按钮button2,通过XmlSerializer的方式生成xml文件
  public void click2(View v){
    try {
      //获取XmlSerializer类的实例 通过xml这个工具类去获取
      XmlSerializer serializer = Xml.newSerializer();
      //设置XmlSerializer序列化参数
      File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
      FileOutputStream fos = new FileOutputStream(file);
      serializer.setOutput(fos,"utf-8");
      //开始写xml文档开头
      serializer.startDocument("utf-8", true);
      //写xml的根节点   namespace 命名空间
      serializer.startTag(null, "smss");
      //遍历sms节点以及子节点
      for (Sms sms : smsLists) {
        serializer.startTag(null, "sms");

        //组拼addressa节点
        serializer.startTag(null, "address");
        serializer.text(sms.getAddress());
        serializer.endTag(null, "address");

        //组拼body节点
        serializer.startTag(null, "body");
        serializer.text(sms.getBody());
        serializer.endTag(null, "body");

        //组拼date节点
        serializer.startTag(null, "date");
        serializer.text(sms.getDate());
        serializer.endTag(null, "date");

        serializer.endTag(null, "sms");
      }
      serializer.endTag(null, "smss");

      //結束xml結尾
      serializer.endDocument();
      //关闭流
      fos.close();

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

那么这里就生成如下图的xml文件:

3、读取xml文件中的数据

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
      //显示数据信息
      TextView tv_sms = (TextView) findViewById(R.id.tv_weather);
      //通过上下文 获取资产的管理者
      InputStream in = getAssets().open("smss.xml");
      //调用我们定义 解析xml的业务方法
      List<Sms> smsLists = SmsParser.xmlParser(in);

      StringBuffer sb = new StringBuffer();
      for (Sms sms : smsLists) {
        sb.append(sms.toString());
      }

      //把数据显示到TextView上
      tv_sms.setText(sb.toString());

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

部分代码说明:

这里我想教大家自己怎么去看开发文档……所以大家自己去看开发文档吧……哈哈哈~~

ps:这里我想说明一下,不是我不会,也不是偷懒,而是大家在以后企业开发的时候都是可以查看开发文档的,而且说实话Android中的东西真的很多很多,要全部记住那简直太难啦……

所以希望大家都能够自己学会查看开发文档……这也算是自己必修的一门课吧~~因为对于小白的我,学会了看文档就免得很多很多的麻烦,比如突然有一个东东不会……怎么办?哈哈哈……

三、总结     

1、生成.txt文件的4种方法和步骤

2、生成xml文件的2种方法和步骤

3、读取.txt文件

4、读取xml文件

5、将数据存放在本机和SD卡中

6、学会看开发文档

7、文件权限

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程中的5种数据存储方式

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据      3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密

  • Android开发笔记之Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android开发笔记之Android中数据的存储方式(一)提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

  • Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

  • Android 数据存储方式有哪几种

    以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

  • 四种Android数据存储方式

    Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider. SharedPreference SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

  • Android开发笔记之Android中数据的存储方式(一)

    对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理,有实时性的需求等.

  • 详解Android四种存储方式

    在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同:以下我分别列举了Android开发中的不同存储方式的特点 一,Preferences Preferences是一个较轻量级的存储数据的方法,具体使用方法: 在A中保存值: SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit(); sharedata.putString("name","

  • Android开发之数据的存储方式详解

    在Android中,数据的存储分为两种方式: 1.直接以文件的形式存储在目录中 2.以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1.生成.txt文件 2.生成xml文件 那么今天就来详细的说一下以文件的形式存储,由于没有讲到数据库,在之后的课程中会讲到json格式存储在数据库中. 一.生成.txt文件 文件的生成无非就是我们Java中学习的输入输出流中的一部分,有Java基础相信都是很容易理解的,因为它真的很简单啦~~ 1.生成目录可以分为两种: 1)本机 2)SD卡 2.

  • Android 文件存储与SharedPreferences存储方式详解用法

    目录 持久化技术简介 文件存储 1. 将数据存储到文件中 2. 从文件中读取数据 SharedPreferences 存储 1. 将数据存储到 SharedPreferences 中 2. 从 SharedPreferences 中读取数据 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据也不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备的数据是处于持久状态的.持久化技术提供了一种机制,可以让数据在瞬时状态和持久状

  • Android开发使用URLConnection进行网络编程详解

    本文实例讲述了Android开发使用URLConnection进行网络编程.分享给大家供大家参考,具体如下: URL的openConnection()方法将返回一个URLConnection,该对象表示应用程序和URL之间的通信连接,程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源.通常创建一个和URL的连接,并发送请求,读取此URL引用的资源. 需要如下步骤: a)通过调用URL对象openConnection()方法来创建URLConnection对象 b)

  • Android开发数据结构算法ArrayList源码详解

    目录 简介 ArrayList源码讲解 初始化 扩容 增加元素 一个元素 一堆元素 删除元素 一个元素 一堆元素 修改元素 查询元素 总结 ArrayList优点 ArrayList的缺点 简介 ArrayList是List接口的一个实现类,它是一个集合容器,我们通常会通过指定泛型来存储同一类数据,ArrayList默认容器大小为10,自身可以自动扩容,当容量不足时,扩大为原来的1.5倍,和上篇文章的Vector的最大区别应该就是线程安全了,ArrayList不能保证线程安全,但我们也可以通过其

  • Android开发使用HttpURLConnection进行网络编程详解【附源码下载】

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便地与指定站点交换信息,URLConnection下还有一个子类:HttpURLConnection,HttpURLConnection在URLConnection的基础上进行改进,增加了一些用于操作HTTP资源的便捷方法. setRequestMethod(String):设置发送请求的方法 get

  • Android开发Jetpack组件DataBinding用例详解

    目录 简介 使用方式 1. build.gradle 中添加 kapt,并启用dataBinding 2.修改布局文件,添加 layout 和 data 标签 3.使用 DataBindingUtil 绑定布局 4.布局的 data 标签中添加数据变量,并使用其参数 5.BindingAdapter的使用 简介 DataBinding 是 Jetpack 组件之一,适用于 MVVM 模式开发,也是Google官方推荐使用的组件之一.使用DataBinding可以很容易的达到视图与逻辑分离,直接在

  • Android开发Jetpack组件WorkManager用例详解

    目录 一.简介 二.导入 三.基本使用 3.1 定义后台任务 3.2 配置任务运行条件 3.2.1 只需执行一次的任务 3.2.2 周期性执行的任务 3.3 将任务传给 WorkManager 四.高级配置 4.1 设置任务延迟执行 4.2 给任务添加标签 4.3 取消任务 4.3.1 根据标签取消任务 4.3.2 根据 request 的 id 取消任务 4.3.3 取消所有任务 4.4 任务重试 4.5 监听任务结果 4.6 传递数据 4.7 链式任务 一.简介 WorkManager 用于

  • Android开发之自定义加载动画详解

    目录 一.demo简介 二.分析贪吃动画的尺寸比例 三.画圆 四.实现张嘴闭嘴动画 五.小球移动动画 一.demo简介 1.效果展示如下图,我截了三个瞬间,但其实这是一个连续的动画,就是这个大圆不停地吞下小圆. 2.这个动画可以拆分为两部分,首先是大圆张嘴闭嘴的动画,相当于画一个圆弧,规定一下它的角度就好.小圆就是一个从右向左移动的动画.然后不停地刷新界面,让动画的持续时间为永恒,这样就会有一个持续的动态效果. 二.分析贪吃动画的尺寸比例 1.在制作动画之前,我们要先建一个模型,来确定一下大圆和

  • Android 开发中使用Linux Shell实例详解

    Android 开发中使用Linux Shell实例详解 引言 Android系统是基于Linux内核运行的,而做为一名Linux粉,不在Android上面运行一下Linux Shell怎么行呢? 最近发现了一个很好的Android Shell工具代码,在这里分享一下. Shell核心代码 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.

  • Android开发Kotlin实现圆弧计步器示例详解

    目录 效果图 定义控件的样式 自定义StepView 绘制文本坐标 Android获取中线到基线距离 效果图 定义控件的样式 看完效果后,我们先定义控件的样式 <!-- 自定义View的名字 StepView --> <!-- name 属性名称 format 格式 string 文字 color 颜色 dimension 字体大小 integer 数字 reference 资源或者颜色 --> <declare-styleable name="StepView&q

随机推荐