Android持久化技术之文件存储

来源:互联网 发布:火影手游网络连接异常 编辑:程序博客网 时间:2024/05/18 13:25

        Android系统主要提供了3中方式用于简单地实现数据持久化的功能,其中包括文件存储SharedPreference存储以及数据库存储。这里来看下如何通过文件存储的方式来持久化数据。

            首先来看看数据是如何存储到文件中的,将文件存储到文件中主要是通过Context类中的openFileOutput()方法,然后在结合java的流操作将数据存储到指定的文件中的。下面来个案例吧。打开android studio,新建个FilePersistence工程。activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:id="@+id/edit"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="Please input something here"/></LinearLayout>

布局文件中的代码很简单,就是放了个文本编辑控件。

MainActivity中的代码如下:

package com.tangliang.filepersistencetest;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.EditText;import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;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();            }        }    }}
MainActivity中的代码也比较简单,就是在activity摧毁的时候通过openFileOutput()方法和java流将输入的数据保存到文件中。

这时候运行程序,输入数据,退出应用,通过Android Device Monitor就可以看到程序对应包下的files文件夹下出现了名为data的文件,这是你可以导出文件到电脑上查看是否是你刚才输入的数据。

    

         再来看看如何从文件中读数据吧。其实从文件中读数据和写数据到文件中类似,只是用的不再是openFileOutput()方法了,而是openFileInput()方法。下面将保存的数据从文件中读出来再显示到EditText控件中。

MainActivity代码如下:

package com.tangliang.filepersistencetest;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;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();    }        @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();            }        }    }}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月小孩便秘怎么办 1个月新生儿便秘怎么办 新生儿头竖立0分怎么办 20天的宝宝便秘怎么办 出生23天的宝宝便秘怎么办 喝奶粉的宝宝便秘怎么办 抱孩子抱的驼背怎么办 4岁宝宝不拉屎怎么办 小朋友大便拉不出来怎么办 儿童便秘拉不出来怎么办 没感冒喉咙有痰怎么办 宝宝喂不进去药怎么办 新生儿只放屁不拉大便怎么办 新生儿腹胀不拉大便怎么办 8月宝宝咳嗽有痰怎么办 2个月婴儿惊吓怎么办 吃了米粉不拉屎怎么办 奇异果奶昔苦了怎么办 8个月宝宝偏瘦怎么办 一岁宝宝螺旋腿怎么办 七个月宝宝晚上咳嗽厉害怎么办 孕7个月感冒咳嗽怎么办 4个月婴儿肺炎怎么办 宝宝吃胡萝卜泥拉肚子怎么办 宝宝吃土豆泥不消化怎么办 五个月宝宝奶睡怎么办 橘子和牛奶一起吃了怎么办 半岁宝宝不喝水怎么办 一岁宝宝总是便秘怎么办 1岁的宝宝不喝水怎么办 两月宝宝不喝水怎么办 破壁机打出的果汁很浓稠怎么办 榨的果汁不甜怎么办 11个月宝宝吃盐怎么办 1岁半宝宝长牙慢怎么办 小孩里面的牙黑怎么办 7个半月宝宝便秘怎么办 2个月婴幼儿便秘怎么办 3个月宝宝不消化怎么办 一天大便二三次不消化怎么办 不消化没胃口几天不大便怎么办?