本文共 3658 字,大约阅读时间需要 12 分钟。
数据持久化就是指将那些内存中的瞬时数据保存到持久化设备中(如手机文件、数据库等),当关机,停电后,数据不丢失。 Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。 今天我们学习第一种存储方式:文件存储。 使用范围:文件储存适合用于存储一些简单的文本数据或二进制数据。
没有理论,直接上代码:
package com.demo.filepersistencedemo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener { private EditText edit; private Button save; private Button loadInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) findViewById(R.id.edit); save = (Button) findViewById(R.id.saveInfo); loadInfo = (Button) findViewById(R.id.loadInfo); save.setOnClickListener(this); loadInfo.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.saveInfo: // 获得edit中输入的值 String inputText = edit.getText().toString(); // 将输入框中的值存入file文件中 save(inputText); edit.setText("");//清空刚刚输入的信息 break; case R.id.loadInfo: String str = load(); if (!TextUtils.isEmpty(str)) { edit.setText(str); edit.setSelection(str.length()); Toast.makeText(this, "信息获取成功", Toast.LENGTH_SHORT) .show(); } break; default: break; } } @Override protected void onDestroy() { super.onDestroy(); // 活动销毁之前,获得edit中输入的值 String inputText = edit.getText().toString(); // 将输入框中的值存入file文件中 save(inputText); } /** * @param inputText * 将输入框中值保存到文件中 保存方式:文件存储 */ public void save(String inputText) { FileOutputStream out = null; BufferedWriter writer = null; try { /** * Context类中提供了openFileOutput(String name, int * mode)方法,实现将数据存储到指定的文件中的功能。 该方法中有两个参数,分别是: * 1、第一个参数name是文件名,这个文件名不可以包含路径, 因为所有的文件都是默认存储到/data/data//files/ 目 录下 的 2、第 二 个 参数 mode是 文件 的 操作 模 式 ,主 要 有两 种 模式 可 * 选: a、MODE_PRIVATE:默认操作模式,文件名相同时,写入的新内容会覆盖原有内容,不存在就创建新文件。 * b、MODE_APPEND:文件名相同时,写入的新内容追加到原有内容后面,不存在就创建新文件。 */ out = openFileOutput("data", Context.MODE_APPEND);// 这里使用追加的方式 writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * @return 保存到文件中的字符串 获得保存到文件中的字符串信息 */ public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { /** * Context类中提供了一个 openFileInput(String name)方法,用于从文 件中读取数据。 * 它只接收一个参数:要读取的文件名, * 然后系统会自动到/data/data/ /files/目录下去加载这个文件, 并返回一个 * FileInputStream 对象,得到了这个对象之后再通过 Java 流的方式就可以将数据读取出来了 */ 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(); }}