最近學習了安卓資料庫程式設計,一直沒時間好好總結一下,是以今天抽空總結一下,算是給自己的知識升華一下。
首先,安卓資料存儲分為五大類:
**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();
}
片
`