Android 檔案存放路徑和讀取方式
阿新 • • 發佈:2019-02-05
getExternalFilesDir();Environment.getExternalStorageState()
對於應用攜帶的靜態資料,可以放置在應用的assets目錄或者res,raw目錄下。
對於assets目錄下的靜態資料,存在當檔案最大支援1MB的侷限,讀取方式如下:
InputStream is = getAssets().open("xxx.xx");
對於res,raw目錄下的檔案,可以通過如下方式讀取:
InputStream is = resources.openRawResource.(R.raw.xxx);
另外,Android還對建立快取提供了支援,通過getCacheDir()可以獲取應用的快取路徑
Android支援在SD卡上的應用私有目錄,在Froyo版本後,通過getExternalFilesDir()可以獲得具體路徑。該路徑依賴與應用的包名,如果你包為hello.file那麼SD開上的應用私有目錄為\mnt\sdcard\Android\data\hello.file\files\.如果希望儲存在SD卡上的公共目錄下,可以通過getExternalStoragePublicDirectory()
SD上的應用需要的快取較大,也可以在SD卡上建立快取目錄,在Froyo版本後,通過getExternalCacheDir()可以獲取應用在SD卡上的快取路徑。在使用SD卡目錄時,需注意SD卡是否掛載,可通過Environment.getExternalStorageState()方法進行判斷,如果返回值為Envirnment.MEDIA_MOUNTED表示SD卡處於掛載狀態,可以放心使用。
SQLite的中的事務處理。當需要一次性修改多個數據時,建議通過SQLite的事務處理進行批量處理,這有利於提高執行的效率。事務處理相關的方法如下:
public void beginTransaction(); public void beginTransactionWithListener(SQLiteTransactionListener transactionListener); public void endTransaction(); public void inTransaction(); public void setTransactionSuccessful();
此外還有使用SharedPreferences來儲存的xml檔案,究其本質其實還是<key,value>值對。Android中XML檔案更多的用來維護應用或者系統的配置檔案,我們在開發中一般用SharedPreferences也是儲存一些應用的配置資訊,記錄使用者的某些操作,例如:使用者是不是第一次進入應用,使用者是否選擇了儲存使用者名稱和密碼和使用者的某些偏好設定等等,Android根據配置資訊是否對其他應用開放,SharedPreferences提供了兩種許可權,MODE_PRIVATE和MODE_WORLD_READABLE。該資料存放在\data\data\包.名\shared_prefs資料夾下,副檔名為.xml。資料以這種形式儲存:
<map><boolean name="firstFlag" value="true" /></map>
獲取SharedPreferences的方法:(該變數一般作為全域性變數,放到Activity的OnCreate方法中初始化,我遇到有人在方法中獲取不到這個變數的錯誤,該成全域性的就獲取到了。)
SharedPreferences sp = getSharedPreferences("儲存xml檔案的名字",MODE_PRIVATE);
String msg = sp.getString("儲存的key","如果沒儲存則會獲得的資料");
msg就是你儲存的資料,如果沒有儲存,那麼獲得就是你後面設定的預設資料
對其編輯的方法:
Editor editor = sp.edit();
editor.putString(key, value);
editor.commit();//一定不要忘記提交,否則就儲存不到檔案中。
如果希望配置資訊對其他應用開放,在設定許可權時,可使用 MODE_WORLD_READABLE,其他應用要獲得該配置資訊時,必須先獲取相應的上下文:
context =createPackageContext("全包名",Context_CONTEXT_IGNORE_SECURITY);
SharedPreferences sp = context.getSharedPreferences("儲存xml檔案的名字",MODE_PRIVATE);
在實際開發中,一定要對獲得context進行是否為null的判斷,有些時候我們打不開,或因許可權不足,或因為應用已經被使用者刪除。
需要說明的是,在PreferenceActivity中內建了對SharedPreferences的支援。如果希望進一步瞭解的使用者可以檢視一下類似ListPreference的用法。
其次Android還提供了內部儲存方式,開發者可以將資料儲存在應用的私有空間中,避免其他程式訪問。其許可權在Context下,有:MODE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE等。內部 儲存所在的目錄為:/date/date/包.名/files
寫入資料可讀資料 也很簡單:
FileOutputStream fos = context.openFileOutput(file,Context_MODE_WORLD_WRITEABLE);
fos.write(bytes);
fos.close();
FileInputStream fis = context.openFileInput("fileName");