欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Android 中的文件存儲(chǔ)

 更新時(shí)間:2021年03月19日 08:30:06   作者:caizhenghe  
這篇文章主要介紹了Android 中的文件存儲(chǔ)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下

概要

當(dāng)我們查看手機(jī)的文件管理器的時(shí)候,會(huì)發(fā)現(xiàn)里面的文件五花八門,想要找到自己項(xiàng)目所對(duì)應(yīng)的文件非常困難,甚至有可能壓根就找不到自己的文件,本文就來(lái)介紹一下APP開(kāi)發(fā)過(guò)程當(dāng)中文件存儲(chǔ)的注意事項(xiàng)。

通常我們會(huì)將存放的文件分為兩種:獨(dú)立文件和專屬文件。顧名思義,獨(dú)立文件就是獨(dú)立于APP之外的文件,不會(huì)隨著APP的刪除而刪除,而專屬文件則是專屬于某個(gè)APP的文件,當(dāng)APP刪除后,會(huì)自動(dòng)清空相對(duì)應(yīng)的專屬文件。

獨(dú)立文件

獨(dú)立文件指的是存放在shared/external storage directory下的文件,通常意義上就是我們的SD卡??梢酝ㄟ^(guò)以下方法獲取SD卡路徑:

Environment.getExternalStorageDirectory ()

不建議將文件存儲(chǔ)在SD卡的根目錄下,這樣會(huì)污染用戶的SD卡根目錄,通常是在根目錄下建立一個(gè)次級(jí)目錄并將文件存儲(chǔ)在次級(jí)目錄下面:

File sdCardDir = Environment.getExternalStorageDirectory ();
File cacheDir = new File(sdCardDir, "Cache");

得到的路徑如下所示:

/storage/emulated/0/Cache

不同平臺(tái)下SD卡的路徑有所差別,所以開(kāi)發(fā)者通常都是持有一個(gè)相對(duì)路徑。

Tips:不同手機(jī)廠商外部存儲(chǔ)根目錄(Environment.getExternalStorageDirectory())的物理地址不一定相同,但它們映射之后的根目錄通常都是一致的,映射之后的根目錄為:/mnt/sdcard/

還可以通過(guò)另一種方法獲取一個(gè)SD卡的次級(jí)目錄:

Environment.getExternalStoragePublicDirectory(String)

針對(duì)于該方法,Android已經(jīng)給出了一套固定的String參數(shù):

Environment.DIRECTORY_ALARMS
Environment.DIRECTORY_DCIM
Environment.DIRECTORY_DOCUMENTS
Environment.DIRECTORY_DOWNLOADS
Environment.DIRECTORY_MOVIES
Environment.DIRECTORY_MUSIC
Environment.DIRECTORY_NOTIFICATIONS
Environment.DIRECTORY_PICTURES
Environment.DIRECTORY_PODCASTS
Environment.DIRECTORY_RINGTONES
// ps:調(diào)用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
//  得到的路徑就是:/storage/emulated/0/Pictures

個(gè)人還是更喜歡第一種方法,因?yàn)榈谝环N方法更加的靈活,可以自定義次級(jí)目錄。

當(dāng)然,在向SD卡存儲(chǔ)文件之前,還需要判斷SD卡是否存在,判斷的方法如下:

if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
  // SD卡存在
}

由于要存儲(chǔ)的是獨(dú)立文件,還需要添加讀寫權(quán)限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

通常情況下只要添加寫權(quán)限即可,添加寫權(quán)限就默認(rèn)添了讀權(quán)限,這兩個(gè)權(quán)限始于Android4.4(KITKAT)

專屬文件

專屬文件可以存放在external storage,也可以存放在internal storage。external storage指的是SD卡,internal storage指的是手機(jī)自帶的存儲(chǔ)區(qū)域。有人可能會(huì)有疑問(wèn):之前獨(dú)立文件不也存放在SD卡中嗎?怎么專屬文件也放在SD卡中,我們的APP怎么區(qū)分這兩者呢?其中獨(dú)立文件通常是存放在SD卡的次級(jí)目錄下,比如剛才提到的"根目錄/Cache",而專屬文件則是存儲(chǔ)于"根目錄/Android/data/packge name"目錄下面,當(dāng)APP刪除時(shí),會(huì)自動(dòng)銷毀這個(gè)文件夾。

通常情況下,我們會(huì)將一些體量比較小的數(shù)據(jù)存放在internal storage中,比如Shared Prefrence文件或者數(shù)據(jù)庫(kù)文件,而將一些體量較大的文件放在external storage中,比如視頻,圖片文件。

存儲(chǔ)專屬文件不需要讀寫權(quán)限~~

internal storage

獲取APP在internal storage中存儲(chǔ)路徑的方法如下:

getCacheDir();
getFileDir();
getDir("name", mode);

得到的路徑如下所示:

/data/data/<package name>/cache
/data/data/<package name>/file
/data/data/<package name>/"name"

這是APP的私有路徑,對(duì)于沒(méi)有root過(guò)的手機(jī),用戶是無(wú)法訪問(wèn)該路徑的,所以安全性有所保障(開(kāi)發(fā)人員可以在AS3.0以上版本的Device File Explorer中訪問(wèn)該路徑)。同時(shí)手機(jī)的SD卡并不是任何時(shí)候都可用的,所以我們必須要將重要的數(shù)據(jù)存放在internal storage中。

根據(jù)Android SDK的說(shuō)法,當(dāng)手機(jī)磁盤空間不足時(shí),系統(tǒng)會(huì)自動(dòng)將清除cache目錄下的文件(除cache以外的其它內(nèi)部存儲(chǔ)空間不會(huì)被自動(dòng)清除)。針對(duì)這種情況,需要將緩存盡可能存儲(chǔ)在非cache文件夾中;或者將cache文件夾下的文件大小控制在系統(tǒng)指標(biāo)之下,獲取系統(tǒng)指標(biāo)的方法如下:

 getCacheQuotaBytes(java.util.UUID)

如果控制在該指標(biāo)以下,文件的清除優(yōu)先級(jí)將會(huì)被排到最低(指標(biāo)是Android8.0特性)。

external storage

獲取APP在external storage中存儲(chǔ)路徑的方法如下:

getExternalCacheDir()

得到的路徑之前也提過(guò)一筆,如下所示:

/storage/emulated/0/Android/data/<package name>/cache

熟悉了external storage的路徑后,也可以通過(guò)SD卡的根目錄來(lái)手動(dòng)創(chuàng)建路徑:

File dataDir = new File(new File(Environment.getExternalStorageDirectory(), "Android"), "data");
File externalCacheDir = new File(new File(dataDir, context.getPackageName()), "cache");
if (!externalCacheDir.exists()) {
  externalCacheDir.mkdirs();
}

除了上面提到過(guò)的視頻、圖片文件,有的時(shí)候,開(kāi)發(fā)者還希望在APP的專屬路徑下放一些可訪問(wèn)的文件,比如crash或者debug的log日志文件,此時(shí)internal storage不能滿足需求(用戶無(wú)法訪問(wèn)internal storage并反饋具體日志),就可以將這些專屬文件放在external storage目錄下。

以上就是詳解Android 中的文件存儲(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于Android 文件存儲(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android中RecyclerView嵌套滑動(dòng)沖突解決的代碼片段

    Android中RecyclerView嵌套滑動(dòng)沖突解決的代碼片段

    這篇文章主要為大家詳細(xì)介紹了Android中RecyclerView嵌套滑動(dòng)沖突解決的代碼片段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 手把手教學(xué)Android用jsoup解析html實(shí)例

    手把手教學(xué)Android用jsoup解析html實(shí)例

    本篇文章主要介紹了手把手教學(xué)Android用jsoup解析html實(shí)例,jsoup 是一款Java 的HTML解析器。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果

    Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果

    這篇文章主要介紹了Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-02-02
  • Android  View移動(dòng)的六種方法小結(jié)

    Android View移動(dòng)的六種方法小結(jié)

    在android開(kāi)發(fā)中,經(jīng)常會(huì)遇到一個(gè)view需要它能夠支持滑動(dòng)的需求。下面通過(guò)本篇文章給大家介紹android view移動(dòng)的六種方法,對(duì)android view移動(dòng)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 深入淺析Android JSON解析

    深入淺析Android JSON解析

    android中網(wǎng)絡(luò)數(shù)據(jù)傳輸是經(jīng)常被用到的,通常我們使用xml或者json,而json更加輕量,便捷,我們使用的更多。我自己在項(xiàng)目中使用很多,今天就說(shuō)說(shuō)android中怎么去解析JSON,幫助自己總結(jié)內(nèi)容,同時(shí)幫助別人少走彎路
    2015-12-12
  • Kotlin中協(xié)程的創(chuàng)建過(guò)程詳析

    Kotlin中協(xié)程的創(chuàng)建過(guò)程詳析

    使用協(xié)程的專業(yè)開(kāi)發(fā)者中有超過(guò) 50% 的人反映使用協(xié)程提高了工作效率,下面這篇文章主要給大家介紹了關(guān)于Kotlin中協(xié)程創(chuàng)建過(guò)程的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Android自定義視圖中圖片的處理

    Android自定義視圖中圖片的處理

    Android系統(tǒng)提供了ImageView顯示普通的靜態(tài)圖片,也提供了AnimationDrawable來(lái)開(kāi)發(fā)逐幀動(dòng)畫,還可通過(guò)Animation對(duì)普通圖片使用補(bǔ)間動(dòng)畫。圖形、圖像處理不僅對(duì)Android系統(tǒng)的應(yīng)用界面非常重要,而且Android系統(tǒng)上的益智類游戲、2D游戲都需要大量的圖形、圖像處理
    2022-07-07
  • Android虛擬導(dǎo)航鍵的顯示隱藏實(shí)例

    Android虛擬導(dǎo)航鍵的顯示隱藏實(shí)例

    下面小編就為大家分享一篇Android虛擬導(dǎo)航鍵的顯示隱藏實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android通過(guò)json向MySQL中讀寫數(shù)據(jù)的方法詳解【寫入篇】

    Android通過(guò)json向MySQL中讀寫數(shù)據(jù)的方法詳解【寫入篇】

    這篇文章主要介紹了Android通過(guò)json向MySQL中讀寫數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android json類的定義、調(diào)用及php接收json數(shù)據(jù)并寫入mysql的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-06-06
  • 解決AndroidStudio無(wú)法運(yùn)行java中的mian方法問(wèn)題

    解決AndroidStudio無(wú)法運(yùn)行java中的mian方法問(wèn)題

    這篇文章主要介紹了解決AndroidStudio無(wú)法運(yùn)行java中的mian方法問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論