Android基礎 你必須瞭解的應用檔案目錄

smartsean發表於2017-12-20

在開發中一般會對手機的記憶體進行操作,比如在使用應用過程中產生的一些日誌、圖片等資訊,我們有時候要對其進行必要的操作,所以要對檔案這一塊要有一個基礎的理解。

概念

1、內部儲存:

首先說明一個概念,內部儲存不是記憶體,而是像磁碟一樣可以儲存資料的地方,他在手機內部,屬於手機自帶記憶體的一部分。

內部儲存私有目錄

裡面有一個 data/data 資料夾,下面存放是所有應用程式的包名資料夾,這部分的內容只有在手機 root 之後才能看得到,如果使用的是模擬器,可以在 Android Device Monitor 中看到。

比如一個應用的包名為 com.test.test 那麼這個應用只能訪問 /data/data/com.test.test 目錄下面的檔案,其他 data/data 目錄下面的檔案這個應用是訪問不到的

方法:

  • Environment.getDataDirectory(); 獲取data根目錄

  • getFilesDir() 方法用於獲取 /data/data/<application package>/files 目錄

  • getCacheDir() 方法用於獲取 /data/data/<application package>/cache 目錄

  • deleteFile() 刪除檔案

  • fileList() 列出所有檔案

注意:當使用者解除安裝 App 時,系統自動刪除 data/data 目錄下對應包名的資料夾及其內容。

2、外部儲存

這裡不要被外部儲存幾個字所迷惑,這裡說的外部儲存其實不單單指的外接的記憶體卡, Android 手機在出廠的時候的記憶體,比如平常我們所說的 64G 、128G 記憶體,這個部分就是我們開發人員所說的外部儲存。

那我們往手機裡面插入的記憶體卡叫什麼呢? 對的,也是叫外部儲存。

在參考文章看到一句話:只要是能看得到,都是外部儲存

外部儲存私有目錄

備註:一般裝置都有內建 SD 卡,同時也提供外部 SD 卡擴充,可能對應路徑的目錄名有所差異。

如果沒有插入記憶體卡的話,一般外部儲存的私有目錄就是:

/storage/emulated/0/Android/data/app package name
複製程式碼

方法:

  • Environment.getExternalStorageDirectory(); 獲取 SD 卡根目錄
  • getExternalFilesDir() 方法用於獲取 /storage/emulated/0/Android/data/<application package>/files 目錄
  • getExternalCacheDir() 方法用於獲取 /storage/emulated/0/Android/data/<application package>/cache 目錄

除了上面的files目錄和cache目錄,我們可以根據自己的分類建立其他的目錄,便於我們更好的管理

3、內部儲存私有目錄 VS 外部儲存私有目錄

不同點

  • 預設情況下,系統並不會自動建立外部儲存空間的應用私有目錄。只有在應用需要的時候,開發人員通過 SDK 提供的 API 建立該目錄資料夾和操作資料夾內容

  • 自 Android 7.0 開始,系統對應用私有目錄的訪問許可權進一步限制。其他 App 無法通過 file:// 這種形式的 Uri 直接讀寫該目錄下的檔案內容,而是通過 FileProvider 訪問

  • 宿主 App 可以直接讀寫內部儲存空間中的應用私有目錄;而在 4.4 版本開始,宿主 App 才可以直接讀寫外部儲存空間中的應用私有目錄,使開發人員無需在 Manifest 檔案中或者動態申請外部儲存空間的檔案讀寫許可權

相同點

  • 同屬於應用私有目錄,當使用者解除安裝 App 時,系統也會自動刪除外部儲存空間下的對應 App 私有目錄資料夾及其內容。

4、最後

內部儲存私有目錄:

  • SharedPreferences
  • SQLiteDatabase
  • App 中的 WebView 快取頁面資訊

不要往裡面存放太多的資料

外部儲存私有目錄:

  • 應用自己使用的圖片等資料
  • 快取資料
  • 日誌資料

如果想被其他應用訪問到的資料,在 SD 卡的根目錄再新建一些資料夾,就不要寫在外部儲存私有目錄下面了。

暫時寫這麼多,以後開發過程中繼續填補。

參考文章:

你可以通過以下方式關注我:

  1. CSDN
  2. 掘金
  3. 個人部落格
  4. Github

相關文章