android数据存储持久化操作

想象一下,当我们辛辛苦苦填写的数据,在一个错误的操作之后付之东流,那样的心情发火可想而知,今天我们就看看在手机上如何实现数据的存储。

首先创建一个新的android工程,修改activity_main.xm。删除自带控件代码修改l如下:

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

接着是MainActivity.java文件.在onCreate方法外定义一个EditText和之前的控件进行绑定

private EditText txt = null;

在onCreate方法中添加

txt = (EditText) findViewById(R.id.txt);

注意,这里除了自动生成的onCreate方法之外,还需要重写onDestroy方法,是为了在活动销毁时,调用我们写好的方法

@Override
	protected void onDestroy() {
		super.onDestroy();
		// 定义一个变量去接收EditText中的值
		String str = txt.getText().toString();
		// 调用写入文件的方法
		save(str);
	}

文件写入的方法

private void save(String str) {
                // 定义一个文件输入流
                FileOutputStream out = null;
                // 定义缓冲流
                BufferedWriter writer = null;
		try {
                        /**
                         * 参数1:要保存的文件的名称
                         * 参数2:操作模式
                         *         a.默认操作模式,MODE_APPEND,如果存在同样名字的文件,会覆盖源文件里的内容
                         *         b.MODE_PRIVATE,如果存在同样名字的文件,会在源文件里的内容后追加数据
                         *         还有2种模式,由于允许其他程序对文件进行修改,存在安全漏洞,所以在android4.2版本中被废弃了
                         *         c.MODE_WORLD_READABLE
                         *         d.MODE_WORLD_WRITEABLE
                         */
                        out = openFileOutput("data.txt", Context.MODE_PRIVATE);
			writer = new BufferedWriter(new OutputStreamWriter(out));
			writer.write(str);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (writer != null) {
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}

	}

接下来在模拟器中进行测试,在文本框里随便输入数据,点击返回键,在DDMS视图中File Explorer下,点击data-->data-->你的项目名称文件-->files下是不是有了一个文件

点击第一个,把文件导出到桌面上,打开看看是不是我们刚才写入的数据!大笑如果是正面成功了!


既然能存储到手机上面,那能不能从手机上面读取呢?答案是肯定的

在之前的acitvitu_main.xml中修改onCreate方法,添加如下代码:

// 读取操作
		String inputText = load();
		// 判断文本框是否为空
		if (!TextUtils.isEmpty(inputText)) {
			// 给文本框赋值
			txt.setText(inputText);
			// 将光标移动到文本后面
			txt.setSelection(inputText.length());
			Toast.makeText(this, "读取文本成功", Toast.LENGTH_SHORT).show();

load方法:该方法得到文件里的文本内容

// 读取文件操作
	private String load() {
		/**
		 * 准备操作: 创建流和缓冲
		 */
		FileInputStream fis = null;
		BufferedReader br = null;
		StringBuilder sb = new StringBuilder();
		try {
			// 要读取文件的名称
			fis = openFileInput("data.txt");
			br = new BufferedReader(new InputStreamReader(fis));
			String in = "";
			while ((in = br.readLine()) != null) {
				sb.append(in);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null)
					br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

此时运行程序看看结果,是不是在EditText文本框里有了上次的值了,那表示成功了,恭喜你,在学习android的路上又向前迈了一步!大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值