通过将数据写入文件可以实现持久化,原理是通过Android提供的openFileOutput和openFileInput方法获取输入输出流,然后利用IO方法写入数据。
这里通过保存EditView中的数据到文件中,实现下次调用该活动的onCreate方法时重现数据。
public class MainActivity extends AppCompatActivity {
EditText editText;
//获取文件中的数据,逻辑很简单,IO操作一如既往的烦
private String getDate(){
FileInputStream inputStream;
BufferedReader reader=null;
StringBuilder res = new StringBuilder();
try {
inputStream=openFileInput("date");
reader=new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line=reader.readLine())!=null){
res.append(line);
}
}catch (IOException e){
}finally {
//高级的的IO流会先关闭它的组件,然后关闭自己所以在这里关闭reader就可以了
try {
if(reader!=null) reader.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
return res.toString();
}
//保存数据的方法
private void saveDate(){
FileOutputStream outputStream ;
OutputStreamWriter writer=null;
try {
outputStream=openFileOutput("date",MODE_PRIVATE);
writer=new OutputStreamWriter(outputStream);
writer.write(editText.getText().toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(writer!=null) writer.close();
}catch (IOException e){
}
}
}
//每次创建活动之前都读取存储的数据写入到文本框中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=findViewById(R.id.edittext);
String date=getDate();
editText.setText(date);
}
//销毁活动之前保存数据
@Override
protected void onDestroy() {
super.onDestroy();
saveDate();
}
}
很简单的逻辑写了一大坨,java IO的异常处理实在是太烦了,下面用Kotlin来实现相同的逻辑。