Android数据持久化功能之一:文件存储

       数据持久化就是指将那些内存中的瞬时数据保存到持久化设备中(如手机文件、数据库等),当关机,停电后,数据不丢失。

 Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是:
 1、文件存储
 2、SharedPreference 存储
 3、数据库存储。
 
 今天我们学习第一种存储方式:文件存储。
 使用范围:文件储存适合用于存储一些简单的文本数据或二进制数据。

没有理论,直接上代码:


效果图如下:



activity_main.xml 中的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入内容" />

    <Button
        android:id="@+id/saveInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存信息" />

    <Button
        android:id="@+id/loadInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取保存的信息" />

</LinearLayout>


MainActivity 中的代码:

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/<package
			 * name>/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/<package name>/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();
	}
}


下载项目:

Android文件存储demo下载 点这里


eclipse中查看file保存的位置,如图:



导入到电脑上的值,如图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值