Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> SharedPreference和FIleInputStream/FileOutputStream 2種存儲方式

SharedPreference和FIleInputStream/FileOutputStream 2種存儲方式

編輯:關於Android編程

 


特點:


1、SharedPreference

本種存儲方式只做簡單的存儲,如其名字一樣。

優點:簡單方便,適合做簡單數據的快速保存

缺點:存放的文件只能在同一個包內,不能跨包引用

2、FIleInputStream/FileOutputStream

文件存儲方式。此種方式可以存放比較大的文件。還可以存儲到SDCARD中。可以跨包進行引用、可以存放到SDCARD上

 


案例Layout xml:


[html]
Layout xml: 
<?xml version="1.0" encoding="utf-8"?>   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
    android:orientation="vertical" android:layout_width="fill_parent"   
    android:layout_height="fill_parent">   
     
     <TextView android:layout_width="fill_parent"   
        android:layout_height="wrap_content" android:text="保存數據練習!"   
        android:textSize="20sp" android:textColor="#ff0000" android:id="@+id/tv_title" />   
    <TextView android:layout_width="fill_parent"   
        android:layout_height="wrap_content" android:text="請輸入帳號" />   
    <EditText android:layout_width="fill_parent"   
        android:layout_height="wrap_content" android:id="@+id/editText_Login"   
        android:text=""></EditText>   
    <TextView android:layout_width="fill_parent"   
        android:layout_height="wrap_content" android:text="請輸入密碼" />   
    <EditText android:layout_width="fill_parent"   
        android:layout_height="wrap_content" android:id="@+id/editText_Password"   
        android:text=""></EditText>   
    <Button android:id="@+id/button_save" android:layout_width="wrap_content"   
        android:layout_height="wrap_content" android:text="保存"></Button>   
    <Button android:id="@+id/button_load" android:layout_width="wrap_content"   
        android:layout_height="wrap_content" android:text="取出數據"   
        android:visibility="invisible"></Button>   
</LinearLayout>   

Layout xml:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
   
     <TextView android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:text="保存數據練習!" 
        android:textSize="20sp" android:textColor="#ff0000" android:id="@+id/tv_title" /> 
    <TextView android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:text="請輸入帳號" /> 
    <EditText android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:id="@+id/editText_Login" 
        android:text=""></EditText> 
    <TextView android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:text="請輸入密碼" /> 
    <EditText android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:id="@+id/editText_Password" 
        android:text=""></EditText> 
    <Button android:id="@+id/button_save" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:text="保存"></Button> 
    <Button android:id="@+id/button_load" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:text="取出數據" 
        android:visibility="invisible"></Button> 
</LinearLayout> 

說明:

由於本篇主要是針對2種存儲方式的存儲和讀取進行說明並未把所有邏輯代碼都貼出來

 


存儲/讀取代碼:


[java]
sp = this.getSharedPreferences("zhang_data", this.MODE_PRIVATE);    
        sp.getString("login", "");     
        login.setText(sp.getString("login", ""));     
        pass.setText(sp.getString("password", "")); 
 
對於上面的這一塊代碼塊中,sp為SharedPreferences對象。值得一說的是當getString拿數據的時候。會按照當前的key去搜索。如果沒有的話它會默認按照第二個參數進行返回。也就是空字符串”” 
 
保存: 
                 sp.edit() 
                .putString("login", String.valueOf(login.getText())) 
                .putString("pass", String.valueOf(pass.getText())) 
                .commit(); 
            attention.setText("保存成功!可重新打開此程序,測試是否已經保存數據!" +     
                    "/n(或者在'File Explorer'窗口下-data-data-com.himi路徑下" +     
                    "是否存在" +"了'zhanglei_data.xml')");   
 
 
 
 
文件存儲方式: 
 
    讀取: 
fis = this.openFileInput("save.zhang"); 
                dis = new DataInputStream(fis); 
                login.setText(dis.readUTF()); 
                pass.setText(dis.readUTF()); 
 
    保存: 
                fos = this.openFileOutput("save.zhang", this.MODE_PRIVATE); 
                dos = new DataOutputStream(fos); 
                dos.writeUTF(login.getText().toString()); 
                dos.writeUTF(pass.getText().toString()); 
                attention.setText("保存成功!可重新打開此程序,測試是" +   
                        "否已經保存數據!/n(或者在'File Explorer'" +   
                        "窗口下-data-data-com.example.savestore.file路徑下" +   
                        "是否存在了'save.zhang')"); 

sp = this.getSharedPreferences("zhang_data", this.MODE_PRIVATE);  
        sp.getString("login", "");   
        login.setText(sp.getString("login", ""));   
        pass.setText(sp.getString("password", ""));

對於上面的這一塊代碼塊中,sp為SharedPreferences對象。值得一說的是當getString拿數據的時候。會按照當前的key去搜索。如果沒有的話它會默認按照第二個參數進行返回。也就是空字符串””

保存:
     sp.edit()
    .putString("login", String.valueOf(login.getText()))
    .putString("pass", String.valueOf(pass.getText()))
    .commit();
   attention.setText("保存成功!可重新打開此程序,測試是否已經保存數據!" +   
                    "/n(或者在'File Explorer'窗口下-data-data-com.himi路徑下" +   
                    "是否存在" +"了'zhanglei_data.xml')"); 

 


文件存儲方式:

 讀取:
fis = this.openFileInput("save.zhang");
    dis = new DataInputStream(fis);
    login.setText(dis.readUTF());
    pass.setText(dis.readUTF());

 保存:
    fos = this.openFileOutput("save.zhang", this.MODE_PRIVATE);
    dos = new DataOutputStream(fos);
    dos.writeUTF(login.getText().toString());
    dos.writeUTF(pass.getText().toString());
       attention.setText("保存成功!可重新打開此程序,測試是" + 
                        "否已經保存數據!/n(或者在'File Explorer'" + 
                        "窗口下-data-data-com.example.savestore.file路徑下" + 
                        "是否存在了'save.zhang')");

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved