您的位置:首页 > 移动开发 > Android开发

android数据存储持久化操作

2015-12-19 11:20 585 查看
想象一下,当我们辛辛苦苦填写的数据,在一个错误的操作之后付之东流,那样的心情

可想而知,今天我们就看看在手机上如何实现数据的存储。

首先创建一个新的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的路上又向前迈了一步!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: