博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android数据持久化功能之一:文件存储
阅读量:4290 次
发布时间:2019-05-27

本文共 3658 字,大约阅读时间需要 12 分钟。

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

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

没有理论,直接上代码:

效果图如下:

activity_main.xml 中的代码:

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

下载项目:

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

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

你可能感兴趣的文章
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>
Spring Boot 中使用一个注解轻松将 List 转换为 Excel 下载
查看>>
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
一口气说出 6种 延时队列的实现方案,大厂offer稳稳的
查看>>
原来redis这么简单,跟着文章操作一遍你就会了
查看>>
Redis两种持久化机制RDB和AOF详解(面试常问,工作常用)
查看>>
事务隔离级别中的可重复读能防幻读吗?
查看>>
老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
查看>>
图片的左右切换
查看>>
进级的RecyclerView——LRecyclerView
查看>>
Android 利用Gradle实现app的环境分离
查看>>
Android系统篇之----Binder机制和远程服务调用
查看>>
JavaScript DOM 属性
查看>>