该方法不对存储内容进行任何格式化处理,比较适合用于一些简单的文本数据或二进制数据。
将数据存储到文件中
Context类中提供了一个openFileOutput()方法,用于将数据存储到指定的文件中。
该方法接收两个参数:
- 文件名。这里指定的文件名不能包含路径,所有文件默认存储在/data/data//files/目录下。
- 文件的操作模式。MODE_PRIVATE:当指定同样的文件名时,所写的内容会覆盖原文件的内容;MODE_APPEND:如果该文件已存在,就往文件里追加内容。
在Androidzhong项目中使用文件存储技术
- 创建一个FilePersistence项目。
- 修改activity_main.xml中代码:添加一个EditText用于输入内容。
<EditText
android:id="@+id/edit_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type something here"/>
- 修改MainActivity,让用户刚输入的数据被回收之前存储在文件中。
瞬时数据会在活动被销毁时被回收,所以要在onDestry()中将瞬时数据存储在文件中。
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.edit_button);
}
public void save(String inputText){
FileOutputStream fileOutputStream = null;
BufferedWriter bufferedWriter = null;
try{
fileOutputStream = openFileOutput("data",MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
bufferedWriter.write(inputText);
}catch(IOException e){
e.printStackTrace();
}finally {
try{
if(bufferedWriter != null) bufferedWriter.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
String text = editText.getText().toString();
save(text);
}
}
从文件中读取数据
Context类中的openFileInput()方法:用于从文件中读取数据,只接收一个参数(要读取的文件名),系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象。
TextUitls.isEmpty()方法:对字符串进行非空判断,当传入的字符等于null或空字符串时,这个方法会返回true.
修改MainActivity中的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.edit_button);
String input = load();
if(!TextUtils.isEmpty(input)){//对字符串进行非空判断
editText.setText(input);//将内容填充到EditText
editText.setSelection(input.length());//将光标移动到内容末尾
Toast.makeText(this,"Restoring succeed",Toast.LENGTH_LONG).show();
}
}
public String load(){
FileInputStream fileInputStream = null;
BufferedReader bufferedReader = null;
StringBuilder content = new StringBuilder();
try{
fileInputStream = openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
String line = "";
while((line = bufferedReader.readLine()) != null){
content.append(line);
}
}catch(IOException e){
e.printStackTrace();
}finally {
try{
if(bufferedReader != null) bufferedReader.close();
}catch (IOException e){
e.printStackTrace();
}
}
return content.toString();
}
首先通过openFileInput()方法获得FileInputStream对象,然后借助它构建一个InputStreamReader对象,接着使用InputStramReader构建一个BufferedReder对象,通过BufferdeReader金星秀一行行读取,把文件内容读出来。