文件存储
1、将数据存储到文件中
Context中有openFileOutPut方法,可将数据存到指定文件中,方法接收两个参数,一个是文件名,没有路径,因为自动存储到/data/data/<package name>/files/目录下的。第二个参数是文件的操作模式,主要是两种模式MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示有同样文件名的时候所写入的内容会覆盖原文件中的内容,而MODE_APPEND表示如果文件已经存在,则追加内容,不创建新文件。
openFileOutPut方法返回的是一个FileOutPutStream对象,得到这个对象之后就可以使用Java流的方式将数据写到文件中了。
public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.et_IO); } @Override protected void onDestroy() { super.onDestroy(); 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.txt文件
可以发现EditText中输入的内容确实已经保存到文件中了
2、从文件中读取数据
public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.et_IO); String inputText = load(); if (!TextUtils.isEmpty(inputText)){ editText.setText(inputText); editText.setSelection(inputText.length()); Toast.makeText(this,"Restoring succeeded",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(); } }