Android数据存储方案——文件存储

概述:文件存储是Android最基本的数据存储之一,它不对数据进行任何格式化处理,而是原封不动的存储在文件当中,它适合存储一些简单的文本数据或二进制数据。

接下来将会通过一个小练习将你输入的文本信息存入文件,然后再从文件中读取你存入的数据,显示在手机上。

1.新建一个Android项目,取名为FileStorage。

2.编写布局文件,在布局文件里,我们会定义两个输入框和两个按钮,用于获取用户输入的数据和显示文件中的数据。

activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp">

        <EditText
            android:id="@+id/get_content"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"/>

        <Button
            android:id="@+id/get"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="获取内容"/>

    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_height="60dp"
        android:layout_width="match_parent">

        <EditText
            android:id="@+id/set_content"
            android:layout_height="60dp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"/>

        <Button
            android:id="@+id/set"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="填充内容"/>

    </LinearLayout>



</LinearLayout>

布局后的效果如下:

3.在MainActivity.java中获取输入框和按钮的实例。并对按钮进行监听。

setContent = (EditText) findViewById(R.id.set_content);
getContent = (EditText) findViewById(R.id.get_content);

setButton = (Button) findViewById(R.id.set);
getButton = (Button) findViewById(R.id.get);

setButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //从文件读取数据
        String content = load();
        if(!TextUtils.isEmpty(content)) {
            //显示在输入框中
            setContent.setText(content);
            //将光标移动到字符串最后
            setContent.setSelection(content.length());
        }
    }
});

getButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String content = getContent.getText().toString();   //获取文本框输入内容
        //将数据保存
        save(content);
        getContent.setText("");
    }
});

4.在getButton按钮中调用sava方法,将从getContent文本框中的内容存入文件,文件名为data。实现save方法如下:

private void save(String content) {
    FileOutputStream out = null;
    BufferedWriter writer = null;

    try {
        out = openFileOutput("data",Context.MODE_PRIVATE);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write(content);
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(writer != null) {
                writer.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面方法中通过openFileOutput()得到了一个FileOutputStream对象out,该方法有两个参数,第一个参数是文件名,第二个参数是文件的操作方式,这里选择了MODE_PRIVATE方式,即默认的操作方式,表示当指定同样文件名时,写入否内容将会覆盖原文件中的内容。然后再使用FileOutputStream对象out得到了一个OutputStreamWriter对象,然后借助OutputStreamWriter对象得到了一个BufferedWriter对象writer。最后通过writer调用write()方法将数据写入文件data中。

5.点击setButton按钮将会调用load方法,将从文件中读取数据,显示在文本输入框中。load方法如下:

private String load() {
    StringBuilder content = new StringBuilder();

    FileInputStream in = null;
    BufferedReader reader = null;

    try {
        in = openFileInput("data");
        reader = new BufferedReader(new InputStreamReader(in));

        String line = "";
        while((line = reader.readLine()) != null) {
            content.append(line);
        }
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return content.toString();
}

6.结果:

在第一个输入框中输入内容,然后点击获取内容按钮。

然后点击填充内容按钮,将会加载文件中的数据显示到文本输入框中。

到这里安卓的文件存储小练习就完成了,文件存储适合存储一些简单的文本数据和二进制数据,不适合存储较为复杂的数据。在安卓的持久化存储技术中还有SharedPreferences存储和数据库存储。后两者更为重要。

发布了38 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43851639/article/details/89853659