Android裝置儲存那些事

2021-10-06 20:03:39 字數 4382 閱讀 3957

外部儲存

公共(共享)目錄

在之前的開發過程中,對於應用儲存目錄存在一些模糊的觀念,在androidq版本中,google對應用儲存空間又做了調整,藉此機會梳理一下。

移動裝置儲存空間大致可劃分為內部儲存外部儲存,而外部儲存又可細分為外部私有儲存外部共享儲存,具體區別如下

儲存結構

訪問方式

/**

*獲取應用內部儲存的files路徑

*/string filespath = context.

getfilesdir()

.getabsolutepath()

;filespath =

/data/data/

/files

//或者(android4.2以後增加多使用者,更改了使用者資料掛載結構,但是檔案還是按照上述data/data/結構儲存)

filespath =

/data/user/0/

/files

/**

*獲取應用內部儲存的cache路徑

*/string cachepath = context.

getcachedir()

.getabsolutepath()

;cachepath =

/data/data/

/cache

//或者(原因同上)

cachepath =

/data/user/0/

/files

/**

*獲取應用內部儲存根目錄下指定目錄路徑,如果目錄不存在,系統則會自動建立

*@param name:目錄名稱

*@param mode:目錄操作模式-私有(預設)僅自己可訪問

*/string targetpath = context.

getdir

(name,context.mode_private)

.getabsolutepath()

;targetpath =

/data/data/

///或者

targetpath =

/data/user/0/

/

擴充套件:在內部儲存files目錄下建立自定義目錄

/**

*在應用內部儲存files目錄下建立子資料夾

*/string customdirpath = context.

getfilesdir()

.getabsolutepath()

+"/customdir"

file customdirfile =

newfile

(customdirpath)

;//如果檔案不存在,則建立if(

!customdirfile.

exists()

)customdirpath =

/data/data/

/files/customdir

//或者

customdirpath =

/data/user/0/

/files/customdir

儲存特點

應用訪問無需(靜態&動態)申請許可權(如果訪問目錄不存在,系統會自動建立)

應用解除安裝後,資料也同步刪除儲存空間有限

由於內部儲存大小有限制的,因此我們用來儲存比較重要的資料,例如使用者資訊資料,口令秘碼等不需要與其他應用程式共享的資料。

注意,由於使用者可以彈出外部儲存,因此外部儲存可能並不總是可用。可以使用environment#getexternalstoragestate(file)檢查**狀態。

私有目錄

儲存結構

訪問方式

/**

*獲取應用外部儲存私有files下指定目錄路徑,如果不指定type則獲取的是files根路徑

*type:系統預設提供內部儲存目錄型別,有如下(也可自定目錄):

* *

*

*

*

*

*

*/string externalfiles = context.

getexternalfilesdir

(type)

.getabsolutepath()

; externalfiles =

/mnt/sdcard/android/data/

/files/

//或者

externalfiles =

/storage/emulated/

0/android/data/

/files/

/**

*獲取應用外部儲存私有cache路徑

*/string externalcache = context.

getexternalcachedir()

.getabsolutepath()

;externalcache =

/mnt/sdcard/android/data/

/cache

//或者

externalfiles =

/storage/emulated/

0/android/data/

/cache

儲存特點

android4.4以後,應用自身訪問無需(靜態&動態)申請許可權(如果訪問目錄不存在,系統會自動建立)

檔案公開,第三方應用可以訪問應用解除安裝後資料同步刪除

公共(共享)目錄

儲存結構

訪問方式

注意:

從andoridq開始,此方法已經過時。為了改善使用者隱私,不推薦直接訪問裝置的外部公共儲存目錄,應使用外部私有目錄(context.getexternalfilesdir(type)方案來替代。

/**

*獲取外部儲存根目錄

*/string externalroot = environment.

getexternalstoragedirectory()

.getabsolutepath()

; externalroot =

/mnt/sdcard

//或者

externalroot =

/storage/emulated/

0

/**

*獲取外部儲存根目錄下指定目錄

*type:系統預設提供的外部儲存目錄型別,有如下(也可自定目錄):

* ,

* ,

* ,

* ,

* ,

* ,

* ,

* ,

* ,

* *。 例如使用

*/string targetpath = envrionment.

getexternalstoragepublicdirectory

(type)

.getabsolutepath()

;file targetfile =

newfile

(targetpath)

;//如果不存在,則建立if(

!targetfile.

exists()

)targetpath =

/mnt/sdcard/

//或者

targetpath =

/storage/emulated/0/

儲存特點

訪問需要申請(靜態&動態)許可權(如果目錄不存在需要提前判斷並建立)

檔案公開,任何應用都可訪問應用解除安裝,資料不會清除

參考文章

Mysql儲存過程那些事

一.建立儲存過程 1.基本語法 sql create procedure sp name begin end 2.引數傳遞 二.呼叫儲存過程 1.基本語法 call sp name 注意 儲存過程名稱後面必須加括號,哪怕該儲存過程沒有引數傳遞 三.刪除儲存過程 1.基本語法 sql drop pro...

Android呼叫相機的那些事

呼叫相機其實很簡單,不過其實也有一些坑,現在記錄下來 先看呼叫 private void tocamera else 這個intent的意圖是拍照 intent intent new intent mediastore.action image capture if build.version sd...

linux核心之裝置驅動那些事(1)

linux核心,作為作業系統的核心部分,管理各種硬體資源。核心對上遮蔽各種底層細節,簡化應用程式開發。核心中有相當比例的 為驅動 因為核心需要支援各種各樣的硬體。每次核心正式版本的發布,驅動 所佔比例總是最多。眾多硬體廠商將驅動 提交到核心開源版本中,並遵從核心驅動架構,除開利益因素,必然意味著驅動...