2013年10月21日 星期一

淺談 Saving Files

Android 使用檔案儲存的方式, 就像將檔案存在硬碟是一樣的, 主要會透過一個名為 File 的 API 來運作.

File 這個 API 適合用來寫入或讀取大量的資料而不間斷, 因此也常跟網路下載一起使用, 尤其是圖片.

選擇 Internal 或 External

儲存的位置可以分為 Internal 跟 External,
Internal 指的是內存, External 指的是 SD 卡.
如果檔案很大, 最好是存在 SD 卡上.
(通常預設 APP的 apk 檔是裝在 internal 裡, 如果檔案很大, 也可以設定裝在 SD 卡上)

下表是 Internal 跟 External 的比較



取得 External 的 Permission

要將檔案存至 SD 卡, 需要在 AndroidManifest.xml 取得 permission



將檔案存在 Internal

內部儲存的位置還分為兩個, 一個是 getFilesDir(), 一個是 getCacheDir().


Cache 是緩存(或稱暫存), 如果不想要 User 在短時間內不斷地 request 伺服器資料, 就可以先存在 Cache 裡. 但存在 Cache 裡的風險是, 一旦系統的資源不夠, 很可能就會把 Cache 理的資料清除掉, 所以使用上要小心.

如果要存在 internal 裡, 可以透過
或者 (使用 openFileOutput(), FileOutputStream )

如果要使用 Cache, 則透過 createTempFile()

將檔案存在 External (SD卡)

可以透過 getExternalStorageState() 來知道是否裝置是否可存(例如, 是否有 SD 卡)

External 儲存可分為  public 跟 private,
public 可以被使用者的其他 App 查到, private 預設則是查不到.
兩個各有各的用法.


如果是 public file, 則取得儲存路徑要透過 getExternalStoragePublicDirectory(),

如果是 private file, 則取得儲存路徑要透過 getExternalFilesDir(),

其中的 Environment.DIRECTORY_PICTURES 是副檔名, 指定存放的位置, 好讓其他系統資源找到.

刪除檔案

刪除檔案可以透過
或者

當 App 刪除時, 會刪除所有 internal 以及 getExternalFilesDir() 的資料.
但 getChcheDir() 的並不會自動刪除 (可考慮手動刪除, 或讓系統自動刪除)

參考來源: http://developer.android.com/training/basics/data-storage/files.html


沒有留言:

張貼留言