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 ...
随机推荐
- Hive UDAF开发详解
说明 这篇文章是来自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比较 ...
- Alarm机制用于定时服务
获取一个 AlarmManager 的实例: AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE) ...
- mongoTemplate学习笔记
mongoTemplate的andExpression表达式 Aggregation<Post> agg = Aggregation.newAggregation( Record.clas ...
- laravel5.2总结--redis使用
一切的前提都是已经安装好了redis服务器,并且能启动(我只总结了mac的安装方法:传送门) 我自己使用的是mac系统,有个教程可以参考下,传送门: 1.安装PHP PRedis 1>PRedi ...
- 15、响应式布局和BootStrap 全局CSS样式知识点总结-part2
1.表格 <div class="container"> <table class="table "> <thead> &l ...
- python学习之dictionary函数的用法
编写下面这段代码运行出现了报错.#!/usr/bin/env python2.7#-*-coding:utf-8 -*- d=['T']a=raw_input('请输入a的值')if a in d : ...
- load_file()与into outfile函数详解
load_file()函数的使用: 1.使用条件 ①有读取文件的权限 r and (select count(*) from mysql.user)>0 如果返回正常则说明有权限,反之没有 ②文 ...
- STL之vector使用简介
Vector成员函数 函数 表述 c.assign(beg,end)c.assign(n,elem) 将[beg; end)区间中的数据赋值给c.将n个elem的拷贝赋值给c. c.at(idx) 传 ...
- java第五次课堂笔记
- 【转】tomcat与apache,tomcat与servlet的区别
tomcat与apache的区别:(转自:http://blog.csdn.net/longzs/article/details/10959945) 1.apache支持静态页,tomcat支持动态的 ...