Android手机里,除了SD卡外部存储以外,还有一部分内部存储,内部存储不是电脑上的内存,它是断电以后依然可以保存数据的,它主要用来装Android操作系统的文件,它们不root是无法看到的。但是内部存储读取速度较快,相当于电脑的系统盘。
一下程序实现了在一个叫et的EditView里,按保存按钮保存数据,并在下次启动应用程序时还原出来。
public class MainActivity extends AppCompatActivity {
private EditText et;
private Button btnSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSave = (Button) findViewById(R.id.btn_Save);
et = (EditText) findViewById(R.id.editText);
ReadSavedText();
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SaveCurrentText();
}
});
}
private void ReadSavedText() {
try {
//新建输出流
InputStream is = openFileInput("data.txt");
Toast.makeText(this, "找到文件", Toast.LENGTH_SHORT).show();
/*新建一个byte数组,InputStream的available方法返回了一个整型,表示可以被读取到的字节数,该方法
不会被别的请求这个输入流的方法打断*/
byte[] bytes = new byte[is.available()];
//将读取到的byte存入bytes数组
is.read(bytes);
is.close();
//将Bytes文件转换为字符串类型,转换方式为utf-8码
String str = new String(bytes, "utf-8");
et.setText(str);
} catch (IOException e) {
e.printStackTrace();
}
}
private void SaveCurrentText() {
try {
/*创建一个新的输出流,第一个参数是要写入的文件的名字,第二个参数是写入模式,MODE_PRIVATE是
覆盖原文件的方式,MODE_APPEND是在原有文件末尾追加数据的方式*/
OutputStream os = openFileOutput("data.txt", Context.MODE_PRIVATE);
//将et中的文本转换为字节码写入文件,以utf-8的编码方式,此编码方式支持中文
os.write(et.getText().toString().getBytes("utf-8"));
//清空输入流
os.flush();
//关闭输入流
os.close();
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}