Android中的数据持久化技术。
Android系统中主要提供了3种方式用于简单地实现数据持久化功能,
文件存储
SharedPreferences存储
数据库存储
Contex
t类中提供了一个openFileOutput
()方法,可以用于将数据存储到指定的文件中。
这个方法接收两个参数,
/data/data/<package name>/files/
目录下的。MODE_PRIVATE
是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,MODE_APPEND
则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。 其实文件的操作模式本来还有另外两种:`MODE_WORLD_READABLE`和`MODE_WORLD_WRITEABLE`,这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作,
不过由于这两种模式过于危险,很容易引起应用的安全性漏洞,已在Android 4.2版本中被废弃
openFileOutput ()
方法返回的是一个FileOutputStream
对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中了。以下是一段简单的代码示例,展示了如何将一段文本内容保存到文件中:
新建项目 FilePersistenceDemo
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入..."/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity
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.edit_text);
}
@Override
protected void onDestroy() {
super.onDestroy();
String text = editText.getText().toString();
saveToFile(text); // 按Back键,关闭程序,保存文本到文件
}
private void saveToFile(String inputText){
FileOutputStream fos =null;
BufferedWriter writer = null;
try {
fos = openFileOutput("myFile", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(fos));
writer.write(inputText);
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if (null != writer){
writer.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
在模拟器中运行 程序,在文本框中输入 Hello Wrod!
在模拟器中(这里使用的是:夜神模拟器,打开系统文件夹,提示要开启root权限)
【夜神模拟器】开启root权限
打开系统文件夹:/data/data/com.example.filepersistencetest/files/
,可以看到生成了一个myFile
文件,
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.edit_text);
String text = loadTextFromFile();
if (!TextUtils.isEmpty(text)){ //Returns true if the string is null or 0-length.
editText.setText(text);
editText.setSelection(text.length()); //setSelection()方法将输入光标移动到文本的末尾位置以便于继续输入,
Toast.makeText(MainActivity.this,"从文件加载文本成功:"+ text, Toast.LENGTH_LONG).show();
}
}
...
private String loadTextFromFile(){
FileInputStream fis = null;
BufferedReader reader = null;
StringBuilder context = new StringBuilder();
try {
fis = openFileInput("myFile");
reader = new BufferedReader(new InputStreamReader(fis));
String line = "";
while ((line = reader.readLine()) != null ){
context.append(line);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (null != reader){
reader.close();
}
}catch (Exception e){
e.printStackTrace();
//如果myFile不存在会发生异常
Toast.makeText(MainActivity.this,"读取文件myFile出现异常", Toast.LENGTH_LONG).show();
}
}
return context.toString();
}
openFileInput("myFile");
打开文件原文:https://www.cnblogs.com/easy5weikai/p/12535213.html