持久化之   文件存储


这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存储,先说说下面Demo的思路:

1、创建EditText,检查本地是否有存储的文件数据,有的话就直接显示,没有就默认创建

2、EditText输入文字,在这个活动销毁之前存储数据

3、活动启动出现之前读取存储的数据

这样一个简单的存储和读取的整个过程我们就完全体现

Demo效果


先看看这整个效果,我们在这个输入框中输入相应的内容,然后在按下返回键,在onDestroy方法中(活动销毁一定会执行这个方法)把我们的数据保存,在加载这个布局的时候,你先判断有没有存储的数据,要有的话就直接显示你存储的数据:

文件存储


很简单的利用文件存储,总结一下文件存储的过程:

1、Context 类中提供了一个 openFileOutput() 方法,可以用于将内容存储到指定的文件当中,这个方法接收两个参数,第一个参数是文件名,第二个参数是文件的操作模式,在下面的代码中有详细的介绍,这里再说一次:

MODE_PRIVATE 是默认的操作,表示当指定同样文件名的时候,所写入的内容将会覆盖掉源文件当中的内容

MODE_APPEND 表示文件存在就往文件里面添加,要是不存在就创建新的文件

2、上面的方法返回的是一个FileOutputstream 对象,得到这个对象之后构造出一个OutputStreamWriter,代码中的OutputStreamWriter(out)就是构造对象方法

3、得到这个OutputStreamWriter对象之后,再用它构造出一个BufferedWriter对象,代码中的 writer = new BufferedWriter(new OutputStreamWriter(out)) 就是最上面两步步骤的总结。

4、得到这个BufferedWriter对象之后,你就可以利用BufferedWriter对象的Write()方法将数据写进文件

文件读取


上面说的是文件存储的步骤,这里在总结一下读取的时候的步骤;

1、 和上面的存储类似,你用openFileInput() 方法得到一个FileInputstream对象,这个openFileInput()方法传递的至于一个参数。就是文件的名字

2、得到这个FileInputstream对象之后,你再拿着它构造一个InputStreamWriter对象,和上面的类似,调用的是InputStreamWriter(),方法,这个方法传递的就是得到的FileInputstream对象

3、得到InputStreamWriter对象之后,利用这个对象获取到一个BufferedReader对象,reader = new BufferedReader( new InputStreamReader(in)) 这一句代码也是涵盖了上面两个步骤

4、这样我们就通过这个BufferedReader对象的readLine()方法得到我们存储的文件内容

NOTE  *****  说了这么多,其实存储和读取的区别,方法步骤你也能看到都类似,记住  Out 是存储  In 是读取,其他的类似就可以了

Demo源码


public class MainActivity extends AppCompatActivity {

    EditText textView;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (EditText) findViewById(R.id.TextView);
String content = loaddata();
//
if (textView.getText().toString().isEmpty()){ textView.setText(content);
textView.setSelection(content.length()); Toast.makeText(this,"读取存储消息成功",Toast.LENGTH_SHORT).show();
}
} @Override
protected void onDestroy() {
super.onDestroy(); // 获取到这个输入框的文字把它存储起来
String content = textView.getText().toString();
saveData(content);
} // 写一个保存数据的方法
// try catch finally 写法的说明
// 代码块在try 中执行,要是有异常抛出,则进入catch块中, 完了之后再执行finally块的代码
private void saveData (String content){ FileOutputStream out = null;
BufferedWriter writer = null; try { // MODE_PRIVATE 是默认的操作,表示当指定同样文件名的时候,所写入的内容将会覆盖掉源文件当中的内容
// MODE_APPEND 表示文件存在就往文件里面添加,要是不存在就创建新的文件
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(content); }catch (IOException e){ //e.printStackTrace();是打印异常的堆栈信息,指明错误原因,其实当发生异常时,通常要处理异常,
// 这是编程的好习惯,所以e.printStackTrace()可以方便你调试程序!
e.printStackTrace();
}finally { try{ if (writer != null){ writer.close();;
}
}catch (IOException e){ e.printStackTrace();
}
}
}
// 读取数据
private String loaddata(){ FileInputStream in = null;
BufferedReader reader = null;
StringBuffer content = new StringBuffer(); try{ in = openFileInput("data");
reader = new BufferedReader( new InputStreamReader(in)); String line = "";
while ((line = reader.readLine()) != null) { content.append(line);
}
}catch (IOException e){ e.printStackTrace();
}finally { if (reader != null){
try{ reader.close();
}catch (IOException e){ e.printStackTrace();;
}
}
}
return content.toString();
}
}

Android学习--持久化(一) 文件存储的更多相关文章

  1. Android数据持久化技术 — — —文件存储

    文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...

  2. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

  3. Android面试收集录 文件存储

    1.请描述Android SDK支持哪些文件存储技术? 使用SharePreferences保存key-value类型的数据 流文件存储(openFileOutput+openFileInput或Fi ...

  4. android学习日记13--数据存储之File存储

    4.文件存储File File即传统的I/O 流存储文件,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的 ...

  5. android学习日记13--数据存储之SharedPreference

    android 数据存储 作为一个完整的应用程序,数据存储必不可少.android 提供了五种不同的数据存储方式:SharedPreferences.SQLite.ContentProvider.文件 ...

  6. Android常用布局、文件存储与权限、XML

    常用的布局 LinearLayout Android 2.2开始fill_parent改名为match_parent ,从API Level为8开始我们可以直接用match_parent来代替fill ...

  7. Android学习笔记——保存文件(Saving Files)

              本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论.                 欢迎转载,转载请注明网址:http://www.cnblogs.com/J ...

  8. 《Android学习指南》文件夹

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...

  9. Android学习--持久化(二) SharedPreferences

    SharedPreferences SharedPreferences 也是通过一个简单的Demo来理解SharedPreferences我们该怎么用,说说自己站在一个iOS开发的角度来看这个Shar ...

随机推荐

  1. TCP/IP网络编程之优雅地断开套接字

    基于TCP套接字的半关闭 Linux的close函数和Windows的closesocket函数意味着完全断开连接,完全断开连接不仅指无法传输数据,而且也不能接收数据.因此,在某些情况下,通信一方调用 ...

  2. 03012_会话技术Cookie&Session

    1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...

  3. IOS开发学习笔记008-预处理

    预处理 1.宏定义 2.条件编译 3.文件包含 注意: 1.所有预处理都是以#开头,并且结尾不用分号. 2.宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 3.作用域也是从定义到代码 ...

  4. CSU-2221 假装是区间众数(ST表模版题)

    题目链接 题目 Description 给定一个非递减数列Ai,你只需要支持一个操作:求一段区间内出现最多的数字的出现次数. Input 第一行两个整数N,Q 接下来一行有N个整数,表示这个序列. 接 ...

  5. 如何删除本地docker images镜像

    背景 本地空间较小,想删除无效的docker镜像内容. 操作步骤 查看本地docker镜像 尝试删除本地镜像 发现无法直接删除镜像 原因分析: 有关联docker容器,无法删除 删除docker容器 ...

  6. C#知识点<3>

    1. C# 结构(Struct) 在 C# 中,结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构. 结构是用来代表一个记录.假设您想跟踪图书馆中 ...

  7. hihoCoder #1809 : 本题数据范围五千

    Analysis (一) 猜想:答案跟 $q_1, q_2, q_3$ 无关:考虑排列 $q$ 是 $1, 2, 3$ 的情况,此时符合要求的排列 $p$ 实际上满足: 对于任意 $i < j ...

  8. 事务ACID特性,其中I代表隔离性(Isolation)。

    事务ACID特性,其中I代表隔离性(Isolation). 什么是事务的隔离性? 隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离 ...

  9. 多啦A梦的制作

    小叮当简单颜色单一,操作起来也很容易上手.接下来的一个实例就是用css画出一个多啦A梦,首先将其分为头部,和身体.然后,再根据身体各部分细节进行进一步的具体刻画. 由于最近一直在学习JavaWeb方面 ...

  10. 卷积神经网络用语句子分类---Convolutional Neural Networks for Sentence Classification 学习笔记

    读了一篇文章,用到卷积神经网络的方法来进行文本分类,故写下一点自己的学习笔记: 本文在事先进行单词向量的学习的基础上,利用卷积神经网络(CNN)进行句子分类,然后通过微调学习任务特定的向量,提高性能. ...