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、文件权限
 
				
时间: 2024-12-23 04:41:23

Android开发-之数据的存储方式一的相关文章

Android开发之数据持久化存储二

一.目标 以QQ登陆为例,继续完成昨天没有完成的任务,实现数据的存储和回显读取,并且学会往SD卡内存储信息 二.源程序代码 package com.example.qq_logindemo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.Vie

Android开发之数据持久化存储三

一.目标 实现SD卡的文件存储,SD卡是否挂载的检查和SD卡剩余空间的查询 二.源程序代码 package com.example.qq_logindemo; import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Envir

iOS开发中数据的存储方式

1.plist属性列表 >1.适用对象:仅仅是Foundation框架中自带的一些类,比如:NSString/NSArray/NSDicionary/NSSet/NSNumber/NSData >2.调用对象的writeToFileXXX方法就可以写入文件 >3.调用对象的XXXWithcontensOfFile方法就可以从文件中读取对象内容 2.偏好设置 >1.本质还是plist属性列表的方法进行存储 >2.存取非常简单  (不用关心文件夹和文件名) >3.只能存储一

Android开发之数据存储的四种方式之SharedPreferences

Android项目开发中使用的数据存储方式有:网络存储.sqlite存储.File存储和SharedPreferences存 储,四种存储方式对应的Demo别人是NetworkDemo.SqliteDemo.FileDemo和SharedPreferencesDemo, 根据应用的场景选择其中一种或多种方式,比如在登录界面验证,需要将用户名和密码通过SharedPreferences方式保存,注册信息的时候需要通 过网络将数据存储到后台数据库中.结合一个登录界面的验证,使用SharedPrefe

Android笔记——Android中数据的存储方式(二)

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

Android的数据的存储方式

数据的存储方式,总的来说分为三种: ① 文件存储: * SharedPreferences存储 * SD卡存储 ---- Environment * 数据库存储 ---- SQLite .MySQL.sqlserver.Oracle * File  存储 * ContentPrivider存储 ② 内存存储 * 集合 * 变量 ③ 网络存储 * 数据在服务器

Android开发 将数据保存到SD卡

前言: 使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的.对于像视频这样的大文件,我们可以把它存放在SDCard. SDCard是干什么的?你可以把它看作是移动硬盘或U盘. 在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件).创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:

Android笔记——Android中数据的存储方式(三)

Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存取,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,并且它是以手机内存为储存的. 那么,实际开发项目中有大量数据需要读写,并且需要面临大量用户的并发储存的情况呢.就不应该把数据存放在手机等移动设备的SQLite数据库里,移动设备的储存能力和计算能力都不足以

Android开发实践 数据存储

所有应用程序必然有数据的输入输出,Android也是一样的,Android应用程序的参数设置.运行状态数据这些都需要保存到外部存储器上,保证关机后数据不丢失,如下是几种Android常见的数据存储方式: SharedPreferences:适合保存少量数据(一些配置信息.积分之类): SQLite:一个真正轻量级数据库,没有后台进程,整个数据库就对应于一个文件,适合大量数据需要存储.访问的情况. 下来详细来看看它们的用法. 1.SharedPreferences SharedPreference