什么是文件存贮:
文件存贮是Android中最基本的一种数据存贮方式,不对存储的内容进行任何形式的格式化处理,所有数据原封不动的保存在文件中,比较适合一些简单的文本数据或二进制数据的存贮。
实例:
1.实现将输入的内容在页面销毁时保存到文件中
2.实现从文件中读取数据
3.将获取的数据展现到控件上
效果展现:
实现步骤:
1.在onDestroy()方法中调用save()方法保存数据到文件中
2.在onCreate()方法中调用loadData()方法从文件中获取数据
3.最后将获取的数据展现到EditText中。
代码实现:
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定EditText控件
editText = findViewById(R.id.main_et);
String content = loadData();
//通过TextUtils.isEmpty()方法获知字符串是否为空
if (!TextUtils.isEmpty(content)) {
//将数据添加到控件中
editText.setText(content);
//将光标放到获取数据的后方
editText.setSelection(content.length());
Toast.makeText(MainActivity.this, "Restored successful ", Toast.LENGTH_SHORT).show();
}
}
private String loadData() {
//创建FileInputStream、BufferedReader、StringBuilder对象
FileInputStream inputStream = null;
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = new StringBuilder();
try {
//通过调用openFileInput()方法,获得FileInputStream对象
inputStream = openFileInput("data");
//通过java流获取数据
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//创建temp对象,是为了从BufferedReader对象中类似于一行行的读取数据
String temp = null;
if ((temp = bufferedReader.readLine()) != null) {
//美读取一行数据就通过append()方法将一行的数据放入到字符串变量StringBuilder中
stringBuilder.append(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stringBuilder.toString();
}
@Override
protected void onDestroy() {
super.onDestroy();
//获取EidtText中的数据
String inputData = editText.getText().toString();
//调用save()方法将数据保存到文件中
save(inputData);
}
private void save(String inputData) {
//创建FileOutputStream和BufferedWriter对象
FileOutputStream outputStream = null;
BufferedWriter bufferedWriter = null;
try {
//通过调用openFileOutput()方法获得FileOutputStream对象
/**
* param1:文件名,创建文件时要命名的文件名
* param2:文件操作方式,有两种MODE_PRIVATE:文件名相同时,第二次修改的覆盖第一次写的内容
* MODE_APPEND:文件名相同时,第二次修改的追加到第一次修改的内容后
*/
outputStream = openFileOutput("data", Context.MODE_PRIVATE);
//使用java流的方式将数据保存到文件中
//下面就是不断的获得对象,最后后的BufferedWriter对象,调用write()方法将内容写到文件中
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write(inputData);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
//关闭BufferedWriter
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}