美文网首页Android 开发
Android 入门(7)——文件持久化存储

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

作者: 正经龙 | 来源:发表于2018-09-11 00:18 被阅读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(键)来获取相应的值

    相关文章

      网友评论

        本文标题:Android 入门(7)——文件持久化存储

        本文链接:https://www.haomeiwen.com/subject/blaegftx.html