Android学习--持久化(一) 文件存储
持久化之 文件存储
这里把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学习--持久化(一) 文件存储的更多相关文章
- Android数据持久化技术 — — —文件存储
文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...
- [置顶] Android学习系列-把文件保存到SD卡上面(6)
Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...
- Android面试收集录 文件存储
1.请描述Android SDK支持哪些文件存储技术? 使用SharePreferences保存key-value类型的数据 流文件存储(openFileOutput+openFileInput或Fi ...
- android学习日记13--数据存储之File存储
4.文件存储File File即传统的I/O 流存储文件,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的 ...
- android学习日记13--数据存储之SharedPreference
android 数据存储 作为一个完整的应用程序,数据存储必不可少.android 提供了五种不同的数据存储方式:SharedPreferences.SQLite.ContentProvider.文件 ...
- Android常用布局、文件存储与权限、XML
常用的布局 LinearLayout Android 2.2开始fill_parent改名为match_parent ,从API Level为8开始我们可以直接用match_parent来代替fill ...
- Android学习笔记——保存文件(Saving Files)
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/J ...
- 《Android学习指南》文件夹
转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...
- Android学习--持久化(二) SharedPreferences
SharedPreferences SharedPreferences 也是通过一个简单的Demo来理解SharedPreferences我们该怎么用,说说自己站在一个iOS开发的角度来看这个Shar ...
随机推荐
- TCP/IP网络编程之优雅地断开套接字
基于TCP套接字的半关闭 Linux的close函数和Windows的closesocket函数意味着完全断开连接,完全断开连接不仅指无法传输数据,而且也不能接收数据.因此,在某些情况下,通信一方调用 ...
- 03012_会话技术Cookie&Session
1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...
- IOS开发学习笔记008-预处理
预处理 1.宏定义 2.条件编译 3.文件包含 注意: 1.所有预处理都是以#开头,并且结尾不用分号. 2.宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 3.作用域也是从定义到代码 ...
- CSU-2221 假装是区间众数(ST表模版题)
题目链接 题目 Description 给定一个非递减数列Ai,你只需要支持一个操作:求一段区间内出现最多的数字的出现次数. Input 第一行两个整数N,Q 接下来一行有N个整数,表示这个序列. 接 ...
- 如何删除本地docker images镜像
背景 本地空间较小,想删除无效的docker镜像内容. 操作步骤 查看本地docker镜像 尝试删除本地镜像 发现无法直接删除镜像 原因分析: 有关联docker容器,无法删除 删除docker容器 ...
- C#知识点<3>
1. C# 结构(Struct) 在 C# 中,结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构. 结构是用来代表一个记录.假设您想跟踪图书馆中 ...
- hihoCoder #1809 : 本题数据范围五千
Analysis (一) 猜想:答案跟 $q_1, q_2, q_3$ 无关:考虑排列 $q$ 是 $1, 2, 3$ 的情况,此时符合要求的排列 $p$ 实际上满足: 对于任意 $i < j ...
- 事务ACID特性,其中I代表隔离性(Isolation)。
事务ACID特性,其中I代表隔离性(Isolation). 什么是事务的隔离性? 隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离 ...
- 多啦A梦的制作
小叮当简单颜色单一,操作起来也很容易上手.接下来的一个实例就是用css画出一个多啦A梦,首先将其分为头部,和身体.然后,再根据身体各部分细节进行进一步的具体刻画. 由于最近一直在学习JavaWeb方面 ...
- 卷积神经网络用语句子分类---Convolutional Neural Networks for Sentence Classification 学习笔记
读了一篇文章,用到卷积神经网络的方法来进行文本分类,故写下一点自己的学习笔记: 本文在事先进行单词向量的学习的基础上,利用卷积神经网络(CNN)进行句子分类,然后通过微调学习任务特定的向量,提高性能. ...