这是基于Android Studio3.2下开发的数据存储和读取,文件存储的核心知识点就是通过Context类中提供的openFileInput()读取数据和openFileOutput()存储数据两种方法,之后就是利用java的各种流来进行进行读写操作。
一、文件的存储
//文件存储之保存数据(传入两个变量,第一个是要存储的字符,第二个是保存对应数据的对应id)
private void fileSave(String inPut , int id){
FileOutputStream out = null;
BufferedWriter writer = null;
try {
switch (id){
case 0x7f070094:
out = openFileOutput("file_data_user",Context.MODE_PRIVATE);
break;
case 0x7f07005c:
out = openFileOutput("file_data_pass",Context.MODE_PRIVATE);
break;
default: Log.d("LoginActivity", "fileSave: 找不到对应的id");
break;
}
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inPut);
Log.d("LoginActivity", "保存成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//保存数据
private void save(){
fileSaveLoad.fileSave(user_name.getText().toString(),user_name.getId());
fileSaveLoad.fileSave(password.getText().toString(),password.getId());
}
//点击登录并保存数据
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fileSaveLoad.save();
// sharedPreferencesTest.preferencesSave();
}
});
openFileOutput()这个方法传入两个参数,第一个是文件名(在创建文件时就用这个名称),第二个是文件的操作模式,主要有两种操作模式:MODE_PRIVATE 和 MODE_APPEND
- MODE_PRIVATE这个模式是默认模式,表示当指定同样文件名时,所写入的内容将覆盖原文件的内容。
- MODE_APPEND这个模式表示如果文件名已则存在,则往里面追加内容(比如说你第一次存储的数据是:123,那么当你再次点击存储时里面的内容就是123123这样子,这显然好多场合不适合这样的存储方式),如果文件名不存在就创建文件
上面是我用于保存文件的一个方法fileSave(),传了两个参数值,第一个是要存储的字符串,第二个是要存储对应的文本框里面的内容,首先说明一下,因为我例子做的是登陆界面,我想存储的是账号和密码这两个的数据,又因为我用的模式是MODE_PRIVATE,假如说我只存在一个文件上,那么当我存储密码时,账号已经被覆盖,这样的话不能实现我的功能,所以必须要两个文件,那这两个文件存储你不可能还要写两个完全一样的方法,这样的话代码的复用性就很差,并且人家一看就知道你是个菜鸟,当然,我也是菜鸟。
好象这样写有点乱,直接贴完整代码块吧,很简单的
/*
文件保存和读取代码内部类
*/
private class FileSaveAndLoad{
//文件存储之保存数据(传入两个变量,第一个是要存储的字符,第二个是保存对应数据的对应id)
private void fileSave(String inPut,int id){
FileOutputStream out = null;
BufferedWriter writer = null;
try {
switch (id){
case 0x7f070094:
out = openFileOutput("file_data_user",Context.MODE_PRIVATE);
break;
case 0x7f07005c:
out = openFileOutput("file_data_pass",Context.MODE_PRIVATE);
break;
default: Log.d("LoginActivity", "fileSave: 找不到对应的id");
break;
}
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inPut);
Log.d("LoginActivity", "保存成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//文件存储之读取数据
private String fileLoad(int id){
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
switch (id){
case 0x7f070094: in = openFileInput("file_data_user"); break;
case 0x7f07005c: in = openFileInput("file_data_pass"); break;
default: Log.d("LoginActivity", "fileLoad: 找不到对应的id");break;
}
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null){
builder.append(line);
}
Log.d("LoginActivity", "读取成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (reader != null) reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return builder.toString();
}
//启动应用自动获取数据并填充
private void load(){
String user_data = fileSaveLoad.fileLoad(user_name.getId());
if (!TextUtils.isEmpty(user_data)){
user_name.setText(user_data);
user_name.setSelection(user_data.length());
}
String pass_data = fileSaveLoad.fileLoad(password.getId());
if (!TextUtils.isEmpty(pass_data)){
password.setText(pass_data);
password.setSelection(pass_data.length());
}
}
//保存数据
private void save(){
fileSaveLoad.fileSave(user_name.getText().toString(),user_name.getId());
fileSaveLoad.fileSave(password.getText().toString(),password.getId());
}
}