在国外做电商网站有哪些,网站要怎么做的,wordpress表单创建插件,百度手机助手安卓版下载Android持久化技术—文件存储
文件存储是Android中最基本的一种数据存储方式#xff0c;它不对存储的内容进行任何的格式化处理#xff0c;所有数据都是原封不动地保存到文件当中的#xff0c;因而它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储…Android持久化技术—文件存储
文件存储是Android中最基本的一种数据存储方式它不对存储的内容进行任何的格式化处理所有数据都是原封不动地保存到文件当中的因而它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储的方式来保存一些较为复杂的文本数据就需要定义一套自己的格式规范这样可以方便之后将数据从文件中重新解析出来。
那么首先我们就来看一看Android中是如何通过文件来保存数据的。
将数据存储到文件中
Context类中提供了一个openFileOutput()方法可以用于将数据存储到指定的文件中。这个方法接收两个参数第一个参数是文件名在文件创建的时候使用的就是这个名称注意这里指定的文件名不可以包含路径因为所有的文件都是默认存储到/data/data/packagename/files/目录下的。第二个参数是文件的操作模式主要有两种模式可选MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式表示当指定同样文件名的时候所写入的内容将会覆盖原文件中的内容而MODE_APPEND则表示如果该文件已存在就往文件里面追加内容不存在就创建新文件。其实文件的操作模式本来还有另外两种MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作不过由于这两种模式过于危险很容易引起应用的安全性漏洞已在Android 4.2版本中被废弃。
openFileOutput ()方法返回的是一个FileOutputStream对象得到了这个对象之后就可以使用Java流的方式将数据写入到文件中了。以下是一段简单的代码示例展示了如何将一段文本内容保存到文件中
public void save() {
String data Data to save;
FileOutputStream out null;
BufferedWriter writer null;
try {
out openFileOutput(data, Context.MODE_PRIVATE);
writer new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer ! null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}如果你已经比较熟悉Java流了理解上面的代码一定轻而易举吧。这里通过openFileOutput()方法能够得到一个FileOutputStream对象然后再借助它构建出一个OutputStreamWriter对象接着再使用OutputStreamWriter构建出一个BufferedWriter对象这样你就可以通过BufferedWriter来将文本内容写入到文件中了。
下面我们就编写一个完整的例子借此学习一下如何在Android项目中使用文件存储的技术。首先创建一个FilePersistenceTest项目并修改activity_main.xml中的代码如下所示
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android
android:orientationvertical
android:layout_widthmatch_parent
android:layout_heightmatch_parent
EditText
android:idid/edit
android:layout_widthmatch_parent
android:layout_heightwrap_content
android:hintType something here
/
/LinearLayout这里只是在布局中加入了一个EditText用于输入文本内容。其实现在你就可以运行一下程序了界面上肯定会有一个文本输入框。然后在文本输入框中随意输入点什么内容再按下Back键这时输入的内容肯定就已经丢失了因为它只是瞬时数据在活动被销毁后就会被回收。
而这里我们要做的就是在数据被回收之前将它存储到文件当中。修改MainActivity中的代码如下所示
public class MainActivity extends AppCompatActivity {
private EditText edit;
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit (EditText) findViewById(R.id.edit);
}
Override
protected void onDestroy() {
super.onDestroy();
String inputText edit.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();
}
}
}
}可以看到首先我们在onCreate()方法中获取了EditText的实例然后重写了onDestroy()方法这样就可以保证在活动销毁之前一定会调用这个方法。在onDestroy()方法中我们获取了EditText中输入的内容并调用save()方法把输入的内容存储到文件中文件命名为data。save()方法中的代码和之前的示例基本相同这里就不再做解释了。现在重新运行一下程序并在EditText中输入一些内容如图所示: 然后按下Back键关闭程序这时我们输入的内容就已经保存到文件中了。那么如何才能证实数据确实已经保存成功了呢我们可以借助点击Android Studio工具栏中的Device File Explorer会看到如图所示的工具列表: 这样就证实了在EditText中输入的内容确实已经成功保存到文件中了。
不过只是成功将数据保存下来还不够我们还需要想办法在下次启动程序的时候让这些数据能够还原到EditText中因此接下来我们就要学习一下如何从文件中读取数据。
从文件中读取数据
类似于将数据存储到文件中Context类中还提供了一个openFileInput()方法用于从文件中读取数据。这个方法要比openFileOutput()简单一些它只接收一个参数即要读取的文件名然后系统会自动到/data/data/package name/files/目录下去加载这个文件并返回一个FileInputStream对象得到了这个对象之后再通过Java流的方式就可以将数据读取出来了。
以下是一段简单的代码示例展示了如何从文件中读取文本数据
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();
}在这段代码中首先通过openFileInput()方法获取到了一个FileInputStream对象然后借助它又构建出了一个InputStreamReader对象接着再使用InputStreamReader构建出一个BufferedReader对象这样我们就可以通过BufferedReader进行一行行地读取把文件中所有的文本内容全部读取出来并存放在一个StringBuilder对象中最后将读取到的内容返回就可以了。
了解了从文件中读取数据的方法那么我们就来继续完善上一小节中的例子使得重新启动程序时EditText中能够保留我们上次输入的内容。修改MainActivity中的代码如下所示
public class MainActivity extends AppCompatActivity {
private EditText edit;
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit (EditText) findViewById(R.id.edit);
String inputText load();
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.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();
}
}可以看到这里的思路非常简单在onCreate()方法中调用load()方法来读取文件中存储的文本内容如果读到的内容不为null就调用EditText的setText()方法将内容填充到EditText里并调用setSelection()方法将输入光标移动到文本的末尾位置以便于继续输入然后弹出一句还原成功的提示。load()方法中的细节我们在前面已经讲过这里就不再赘述了。
注意上述代码在对字符串进行非空判断的时候使用了**TextUtils.isEmpty()方法这是一个非常好用的方法它可以一次性进行两种空值的判断。**当传入的字符串等于null或者等于空字符串的时候这个方法都会返回true从而使得我们不需要先单独判断这两种空值再使用逻辑运算符连接起来了。现在重新运行一下程序刚才保存的Content字符串肯定会被填充到EditText中然后编写一点其他的内容比如在EditText中输入Hello接着按下Back键退出程序再重新启动程序这时刚才输入的内容并不会丢失而是还原到了EditText中如图所示: 这样我们就已经把文件存储方面的知识学习完了其实所用到的核心技术就是Context类中提供的openFileInput()和openFileOutput()方法之后就是利用Java的各种流来进行读写操作。
不过正如我前面所说文件存储的方式并不适合用于保存一些较为复杂的文本数据因此下面我们就来学习一下Android中另一种数据持久化的方式它比文件存储更加简单易用而且可以很方便地对某一指定的数据进行读写操作。
如果对你有帮助就一键三连呗点赞收藏关注我会持续更新更多干货~~