将数据存储到文件中
openFileOutput(文件名,文件的操作模式),返回对象为FileOutputStream对象
文件名:文件创建时创建名称,不包括路径,默认存储到/data/data/<package_name>/files目录(这块暂时有疑问)
文件的操作模式:MODE_PRIVATE,覆盖原有内容;MODE_APPEND,追加新内容
代码将编辑文本框中的内容存到文件中:
protected void onDestroy() {
super.onDestroy();
editText=(EditText) findViewById(R.id.message_send);
String inputText=editText.getText().toString();
save(inputText);
}
public void save(String inputText){
FileOutputStream out=null;
BufferedWriter writer=null;
try{
out=openFileOutput("data", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if (writer!=null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
即当活动销毁的时候存储到data文件中。openFileOutput——>FileOutputStream——>OutputStreamWriter——>BufferedWriter,通过BufferedWriter写入到文件中。
*注意:*需要重新阅读一下Java的读写操作。
从文件中读取数据
openFileInput(读取文件名)
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText)findViewById(R.id.message_send);
String inputText=load();
if(!TextUtils.isEmpty(inputText)){
editText.setText(inputText);
editText.setSelection(inputText.length());
Toast.makeText(this,"restoring successed",Toast.LENGTH_SHORT).show();
}
}
public String load(){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try{
in=openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line="";
while((line=reader.readLine()) !=null){
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (reader!=null){
try{
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
onCreate()方法中调用load()方法得到文件中存储的文本内容。
用TextUtils.isEmpty()方法判断是否为空,一次性对两种空值判断:字符串为null或者等于空字符串,参数为String类型,如果为空,返回true。
读到的内容不为空,则调用EditText的setText()方法,将内容填充,参数为String类型。同时调用EditText的setSelection()方法将光标移动到文件内容结尾,参数为int类型。
之后使用Toast表示读取数据成功。
测试结果
即在文本编辑框中填写内容,并把数据保存在data文件中。
之后按back键返回,再重新打开,便可以看到刚刚编辑在文本框中的内容展示出来,并且光标在这个之后。