Android 开发

Android 入门(7)——文件持久化存储

2018-09-11  本文已影响0人  正经龙

我们在编程的时候,难免会遇到数据保存的情况。例如,当我们与别人进行聊天的时候,发送的消息或者接收到的消息,肯定不能发完之后切换一个页面,再切换回来之后就消失了。想必那样的程序一定是让人抓狂的。

这篇文章我们将介绍一下Android的两种简单的文件存储方式

  1. 文件存储
  2. SharedPreferences 存储

将数据存储在文件中

Android提供了一个函数openFileOutPut用于进行文件创建与打开,这个函数有两个参数,一个是文件的名字,另一个是打开的方式。

Context.MODE_PRIVATE(默认模式,打开文件并覆盖写入)
Context.MODE_APPEND(后加模式,打开文件并追加到后面)

openFileOutPut返回一个FileOutputStream对象
然后利用BufferedWriterwrite方法将数据写入文件中

示例

创建一个新的项目FileIOTest,打开active_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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/put_data"
        android:hint="output data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/get_data"
        android:hint="input data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/put_button"
        android:text="put"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/get_button"
        android:text="get"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

效果 效果图

接下来打开MainActivity.java,进行我们的主代码编写

public class MainActivity extends AppCompatActivity {
    private Button getButton;
    private Button putButton;
    private EditText putEdit;
    private EditText getEdit;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getButton = (Button)findViewById(R.id.get_button);
        putButton = (Button)findViewById(R.id.put_button);
        putEdit = (EditText)findViewById(R.id.put_data);
        getEdit = (EditText)findViewById(R.id.get_data);
        putButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String getData = putEdit.getText().toString();
                saveData(getData);
            }
        });

    }
    void saveData(String inputText){
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try{
            out = openFileOutput("data",Context.MODE_APPEND);
            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();
            }
        }
    }
    void getData(){
        String get_Data = "";
    }
}
  1. 代码有点长,我们分开来看。首先看oncreate函数里面。我们主要是获取了每一个控件的引用,并且给putButton设置点击事件。
  2. 然后获取FileOutPutStream对象,利用这个对象初始化写入对象BufferedWriter。
  3. 最后利用writer.write(data)写入。

从文件中获取数据

由于只是写入数据不够全面,这里将获取数据一同作为一个整体讲解。
Android给我们同样提供了读取数据函数openFileInput,这个函数指需要传进去一个参数,就是文件名。
使用也很简单,通过openFileInput获取FileInputString对象,利用FileInputStream对象初始化BufferedReader,然后利用BufferedReaderreadLine读取数据。

    String getData(){
        String inputString= "";
        FileInputStream in = null;
        BufferedReader reader = null;
        StringBuilder builder = new StringBuilder();
        try{
            in = openFileInput("data");
            reader = new BufferedReader(new InputStreamReader(in));
            while((inputString = reader.readLine())!=null){
                builder.append(inputString);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(reader!=null){
                try {
                    reader.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
        return builder.toString();
    }

上述代码实现读取data文件并且将所有数据都读出来
在主函数进行点击事件写入

       getButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String getString = getData();
                getEdit.setText(getString);
            }
        });

效果

输入三次数据,第一次输入firstdata,第二次seconddata,第三次thirddata,最后获取所有输入的数据,即为测试成功


测试

使用SharedPerferences

SharedPerferences存储文件格式为xml
存储格式为键、值对。
Context中getSharedPerferences,第一个用于指定存储文件名,第二个用于打开文件格式。
目前打开格式只有:MODE_PRIVATE

使用步骤:

  1. 调用SharedPreferences对象的edit()函数返回一个SharedPreferenced.Editor对象
  2. 利用各种put函数向SharedPreferences.Editor中传入数据
    如传入String使用putString()。
  3. 使用apply()提交数据。

制作简单界面

界面
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/your_id"
            android:hint="Id"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <EditText
            android:id="@+id/your_password"
            android:hint="Password"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    </LinearLayout>
    <Button
        android:id="@+id/button"
        android:text="set_Message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

主函数

public class MainActivity extends AppCompatActivity {

    Button button;
    EditText idEdit;
    EditText passwordEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button =(Button)findViewById(R.id.button);
        idEdit = (EditText)findViewById(R.id.your_id);
        passwordEdit = (EditText)findViewById(R.id.your_password);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String Id = idEdit.getText().toString();
                String Password = passwordEdit.getText().toString();
                SharedPreferences.Editor editor = getSharedPreferences("DataList",MODE_PRIVATE).edit();
                editor.putString("Id",Id);
                editor.putString("password",Password);
                editor.apply();
            }
        });

    }
}

输入数据

使用

查看DataList.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="password">4787897894984</string>
    <string name="Id">154967797</string>
</map>

获取存入的数据也很简单,使用getSharedPreferences获取SharedPreferences对象,然后使用getString(键)来获取相应的值

上一篇下一篇

猜你喜欢

热点阅读