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 ...
随机推荐
- python os模块进程函数
Table of Contents 1. 系统进程 2. 举例 2.1. os.fork 2.2. os.exec 和 os.system 2.3. os.wait 3. 总结 系统进程 今天在看&l ...
- 图学java基础篇之IO
java io体系 如图可以看出,java的io按照包来划分的话可以分为三大块:io.nio.aio,但是从使用角度来看,这三块其实揉杂在一起的,下边我们先来概述下这三块: io:主要包含字符流和字节 ...
- [原]sencha touch之panel和tabpanel
最近在弄senchatouch的项目,所以边学习边开发,边记录,直接记录下test code如下: Panel: Ext.application({ name:'itKingApp', launch: ...
- 洛谷P1328生活大爆炸版石头剪刀布
题目链接:https://www.luogu.org/problemnew/show/P1328
- 计算时间复杂度&空间复杂度
1.下面函数的复杂度是: long foo(long x){ if(x<2) return 1; return x*x*foo(x-1); } 解析: 当n>=2时 foo(n)=n^2* ...
- 安装的 Python 版本太多互相干扰?pyenv 建议了解一下。
写在之前 我们都知道现在的 Python 有 Python2 和 Python3,但是由于各种乱七八糟的原因导致这俩哥们要长期共存,荣辱与共,尴尬的是这哥俩的差异还比较大,在很多时候我们可能要同时用到 ...
- opendatasource问题
EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'Ad Hoc Distributed ...
- [译]pandas .at 和.loc速度对比
df.at 一次只能访问一个值. df.loc能够选取多行多列. In [25]: %timeit df.loc[('a', 'A'), ('c', 'C')] 10000 loops, best o ...
- java之LinkedList.add
LinkedList: public boolean add(E e) { linkLast(e); return true; } void linkLast(E e) { //last为当前集合的最 ...
- ruby 发送邮件
产品构建.打包.部署完需要发送邮件通知相关人员进行验证.请看过程 #encoding:utf-8 require 'mail' #~ branch = ARGV.to_s.sub('[','').su ...