天天看點

安卓資料庫程式設計總結(1)

最近學習了安卓資料庫程式設計,一直沒時間好好總結一下,是以今天抽空總結一下,算是給自己的知識升華一下。

首先,安卓資料存儲分為五大類:

**1. Shared Preferences

- 外部存儲(SD卡)

- 内部存儲(手機記憶體)

- 網絡存儲

- SQLite Databases**

本篇部落格先介紹手機内部和外部存儲: 内部存儲和外部也可以了解為File存儲,谷歌為我們提供了兩鐘檔案夾來存放File資訊:

- files檔案夾:存放重要檔案,隻有應用被解除安裝或者删除資料才會丢失

- cache檔案夾:存放臨時檔案資訊,應用删除緩存就删除檔案資料

 這兩種檔案夾都位于資料檔案夾下    

getFilesDir()//傳回使用openFileOutput建立的檔案的絕對路徑

File file=getFilesDir();file.getPath();//傳回/data/data/com.example.filestorage/files

File file=getCacheDir()
file.getPath();//傳回data/data/com.example.filestorage/cache
           

## 内部存儲 ##

在安卓中,Context給我們提供了兩個方法來打開本應用程式檔案夾下的檔案的IO流。

File存儲的檔案位于應用檔案夾/data/data/files

public abstract FileInputStream openFileInput(String name)//取得檔案輸入流
name:需要打開的檔案,不能含有分隔符


 public abstract FileOutputStream openFileOutput(String name, int mode)//取得檔案輸出流
name:需要打開的檔案,不能含有分隔符
mode:打開檔案的模式,安卓裡面有四中檔案建立模式:
       MODE_APPEND//追加模式,可以向檔案追加内容
       MODE_PRIVATE//預設模式,私有模式,該檔案隻能被目前應用讀寫,并且輸入新内容後就得内容會被删除
       MODE_WORLD_READABLE//隻讀模式,該應用程式可以被其他應用程式讀取
       MODE_WORLD_WRITEABLE//可寫模式,該應用程式可以被其他應用程式讀寫
   **注意:隻有MODE_APPEND模式才可以追加内容,其它模式在寫入新内容時,就得内容就被删除。**   
           

**MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE已經被不建議使用,如果需要和其他的應用程式分享資料,建議使用Contenprovider或者Broadcastreceiver。

外部存儲

進行外部存儲讀取資料的步驟:

配置權限
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 判斷SD卡狀态,即是否插入SD卡
 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)  
  如果傳回true,則SD卡可用,false不可用
 取得SD卡目錄
    Environment.getExternalStorageDirectory()
 使用輸出輸入流讀取SD卡檔案資料
**内部存儲示例代碼*
```public class MainActivity extends ActionBarActivity {

    private EditText et_write,et_query;
    private static final String FILE_NAME="file1.txt";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView(){
        et_write=(EditText)findViewById(R.id.et_write);
        et_query=(EditText)findViewById(R.id.et_query);
    }

public void click1(View view) throws Exception{
  FileOutputStream fos=openFileOutput(FILE_NAME, MODE_APPEND);
  String datas=et_write.getText().toString().trim();
  fos.write(datas.getBytes());
  Toast.makeText(MainActivity.this, "添加成功", ).show();
  fos.close();
}
  public void click2(View view) throws Exception{
     FileInputStream fis= openFileInput(FILE_NAME);
     byte[] buff=new byte[];
    //由于會修改和删除檔案資訊,是以為了減少記憶體開銷,不建議使用不可改變字元串的String
     StringBuilder sb=new StringBuilder();
     int len=;
     while((len=fis.read(buff))!=-){
         sb.append(new String(buff));
     }

     et_query.setText(sb.toString());
     Toast.makeText(MainActivity.this, "讀取成功", ).show();

  }
片
           

`

繼續閱讀