亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

淺析Android文件存儲(chǔ)

瀏覽:6日期:2022-09-17 17:10:01
目錄一、內(nèi)部存儲(chǔ)二、外部存儲(chǔ)2.1、外部公有2.2、外部私有一、內(nèi)部存儲(chǔ)

內(nèi)部存儲(chǔ),位于data/data/包名/路徑下

是否需要用戶(hù)權(quán)限:否

是否能被其他應(yīng)用訪問(wèn):否

卸載應(yīng)用數(shù)據(jù)是否被刪除:是

內(nèi)部存儲(chǔ)控件不需要用戶(hù)權(quán)限,這意味著我們不需要用戶(hù)去授權(quán)下面的權(quán)限:

android.permission.WRITE_EXTERNAL_STORAGE

android.permission.READ_EXTERNAL_STORAGE

對(duì)于設(shè)備中每一個(gè)安裝的 App,系統(tǒng)都會(huì)在 data/data 目錄下以應(yīng)用程序包名自動(dòng)創(chuàng)建與之對(duì)應(yīng)的文件夾,可以直接讀寫(xiě)該目錄下的文件。而且該目錄下的文件不能被其他應(yīng)用訪問(wèn)。這也就保證了我們應(yīng)用內(nèi)部存儲(chǔ)的文件的安全性和隱私性,如果我們需要查看自己應(yīng)用內(nèi)部的文件,我們可以通過(guò) Android Studio的Device File Explore工具進(jìn)行訪問(wèn):

淺析Android文件存儲(chǔ)

淺析Android文件存儲(chǔ)

通過(guò)這個(gè),可以查看對(duì)應(yīng)應(yīng)用的存儲(chǔ)文件。

/data/data/應(yīng)用名/cache :存放的是APP的緩存信息

/data/data/應(yīng)用名/code_cache :在運(yùn)行時(shí)存放應(yīng)用產(chǎn)生的編譯或者優(yōu)化的代碼

/data/data/應(yīng)用名/files : 存放APP的文件信息

還有一些運(yùn)行時(shí),產(chǎn)生的文件夾,例如調(diào)用 SharedPreference 所產(chǎn)生的 /data/data/應(yīng)用包名/shared_prefs 目錄,存放著 app 的 SharedPreference 所產(chǎn)生的 xml 文件,還有調(diào)用數(shù)據(jù)庫(kù)所產(chǎn)生的 **/data/data/應(yīng)用包名/databases/** 文件夾,這里就不一一舉例。

從技術(shù)上來(lái)講如果你在創(chuàng)建內(nèi)部存儲(chǔ)文件的時(shí)候?qū)⑽募傩栽O(shè)置成可讀,其他 app 能夠訪問(wèn)自己應(yīng)用的數(shù)據(jù),前提是他知道你這個(gè)應(yīng)用的包名,如果一個(gè)文件的屬性是私有(private),那么即使知道包名其他應(yīng)用也無(wú)法訪問(wèn)。 內(nèi)部存儲(chǔ)空間十分有限,因而顯得可貴,另外,它也是系統(tǒng)本身和系統(tǒng)應(yīng)用程序主要的數(shù)據(jù)存儲(chǔ)所在地,一旦內(nèi)部存儲(chǔ)空間耗盡,手機(jī)也就無(wú)法使用了。所以對(duì)于內(nèi)部存儲(chǔ)空間,我們要盡量避免使用。Shared Preferences 和 SQLite 數(shù)據(jù)庫(kù)都是存儲(chǔ)在內(nèi)部存儲(chǔ)空間上的。內(nèi)部存儲(chǔ)一般用 Context 來(lái)獲取和操作。訪問(wèn)內(nèi)部存儲(chǔ)的API方法:

1.getFilesDir().getAbsolutePath() :/data/user/0/com.example.myapplication/files

2.getCacheDir().getAbsolutePath() :/storage/emulated/0/Android/data/com.example.myapplication/cache

3.getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() :/data/user/0/com.example.myapplication/app_myfile

4.getCodeCacheDir().getAbsolutePath() : /data/user/0/com.example.myapplication/code_cache ,要求Android5.0+

二、外部存儲(chǔ)

概念:最容易混淆的是外部存儲(chǔ),因?yàn)槔系?Android 系統(tǒng)的跟新的 Android 系統(tǒng)是有差別的,很多人去網(wǎng)上查找資料,看了一下以前的資料,又看了一下現(xiàn)在的資料,但是發(fā)現(xiàn)它們說(shuō)法不一樣然后就困惑了。

首先說(shuō)一個(gè)大家普遍的概念 '如果在 pc 機(jī)上是區(qū)分外部存儲(chǔ)和內(nèi)部存儲(chǔ)的話(huà),那么電腦自帶的硬盤(pán)算是內(nèi)部存儲(chǔ),U盤(pán)或者移動(dòng)硬盤(pán)就是外部存儲(chǔ)了。' 因此很多人帶著這樣的理解去看待安卓手機(jī),把內(nèi)置存儲(chǔ)(機(jī)身存儲(chǔ))當(dāng)做內(nèi)部存儲(chǔ),而把擴(kuò)展的 SD 卡當(dāng)做是外部存儲(chǔ)。

這么認(rèn)為確實(shí)沒(méi)錯(cuò),因?yàn)樵?4.4(API19)以前的手機(jī)上確實(shí)是這樣的,手機(jī)自身帶的存儲(chǔ)卡就是內(nèi)部存儲(chǔ),而擴(kuò)展的SD卡就是外部存儲(chǔ)。

但是從 4.4 的系統(tǒng)開(kāi)始,很多的中高端機(jī)器都將自己的機(jī)身存儲(chǔ)擴(kuò)展到了 8G 以上,比如有的人的手機(jī)是 16G 的,有的人的手機(jī)是 32G 的,但是這個(gè) 16G,32G 是內(nèi)部存儲(chǔ)嗎,不是的,它們依然是外部存儲(chǔ)。

也就是說(shuō) 4.4 系統(tǒng)及以上的手機(jī)將機(jī)身存儲(chǔ)存儲(chǔ)(手機(jī)自身帶的存儲(chǔ)叫做機(jī)身存儲(chǔ))在概念上分成了 '內(nèi)部存儲(chǔ)internal' 和 '外部存儲(chǔ)external' 兩部分。既然 16G,32G 是外部存儲(chǔ),那有人又有疑惑了,那 4.4 系統(tǒng)及以上的手機(jī)要是插了 SD 卡呢,SD 卡又是什么呢,如果 SD 卡也是外部存儲(chǔ)的話(huà),那怎么區(qū)分機(jī)身存儲(chǔ)的外部存儲(chǔ)跟 SD 卡的外部存儲(chǔ)呢?

對(duì),SD卡也是外部存儲(chǔ),那怎么區(qū)分呢,在4.4以后的系統(tǒng)中,API提供了這樣一個(gè)方法來(lái)遍歷手機(jī)的外部存儲(chǔ)路徑:

File[] files;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { files = getExternalFilesDirs(Environment.MEDIA_MOUNTED); for(File file:files){Log.e('main',file); }}

如果你的手機(jī)插了SD卡的話(huà),那么它打印的路徑就有兩條了,例如我的華為榮耀 7 插了SD卡,它的結(jié)果如下:

/storage/emulated/0/Android/data/packname/files/mounted

/storage/B3E4-1711/Android/data/packname/files/mounted

其中 /storage/emulated/0 目錄就是機(jī)身存儲(chǔ)的外部存儲(chǔ)路徑,而 /storage/B3E4-1711/ 就是 SD 卡的路徑,他們統(tǒng)稱(chēng)為外部存儲(chǔ)。

一般對(duì)于外部存儲(chǔ)可以分為兩類(lèi),外部公有和外部私有。

2.1、外部公有

是否需要用戶(hù)權(quán)限:是

是否能被其他應(yīng)用訪問(wèn):是

卸載應(yīng)用數(shù)據(jù)是否被刪除:否

公共目錄必須需要用戶(hù)授權(quán)讀寫(xiě)的權(quán)限,這意味著我們需要在AndroidManifest.xml中注冊(cè)用戶(hù)權(quán)限。

<!-- 外部存儲(chǔ)寫(xiě)入數(shù)據(jù)權(quán)限 --><uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' /><uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE'/>

并且在 Android 6.0 系統(tǒng)之后需要申請(qǐng)用戶(hù)權(quán)限,并獲得用戶(hù)授權(quán),才能讀寫(xiě)文件。

公共目錄相對(duì)開(kāi)放,我們可以訪問(wèn)其他APP存在公共目錄下的文件,并且當(dāng) APP 被刪除時(shí),并不會(huì)刪除應(yīng)用存在公共目錄下的文件。

我們可以通過(guò) Environment 對(duì)象,訪問(wèn)讀寫(xiě)公共目錄的文件。

在對(duì)外部存儲(chǔ)進(jìn)行讀寫(xiě)的時(shí)候,應(yīng)該先判斷一下外部存儲(chǔ)的狀態(tài),是否能夠支持讀寫(xiě)。

Environment.getExternalStorageState() /** {@link #MEDIA_UNKNOWN}, {@link #MEDIA_REMOVED}, *{@link #MEDIA_UNMOUNTED}, {@link #MEDIA_CHECKING}, *{@link #MEDIA_NOFS}, {@link #MEDIA_MOUNTED}, *{@link #MEDIA_MOUNTED_READ_ONLY}, {@link #MEDIA_SHARED}, *{@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE} */

只有在返回值為MEDIA_MOUNTED 表示當(dāng)前是可正常讀寫(xiě)的。

接下來(lái)讓我們看看相關(guān)的API。

1. Environment.getExternalStorageDirectory() : /storage/emulated/0

2. Environment.getExternalStoragePublicDirectory(String type)  

Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS).getAbsolutePath()  : /storage/emulated/0/Documents

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath() : /storage/emulated/0/Music

2.2、外部私有

是否需要用戶(hù)權(quán)限:4.4以上不需要

是否能被其他應(yīng)用訪問(wèn):否

卸載應(yīng)用數(shù)據(jù)是否被刪除:是

私有目錄,在 Android4.4 系統(tǒng)以上。不需要注冊(cè)和用戶(hù)授權(quán)外部私有存儲(chǔ)的讀寫(xiě)的權(quán)限,就可以在應(yīng)用的外部私有進(jìn)行讀寫(xiě)文件。并且文件不能被其他應(yīng)用所訪問(wèn),具有較好的隱私性和安全性,并且在用戶(hù)刪除的時(shí)候,對(duì)應(yīng)的應(yīng)用私有目錄也會(huì)被刪除。

私有目錄地址:/storage/emulated/0/Android/data/應(yīng)用包名

相關(guān)API如下:

getExternalCacheDir().getAbsolutePath()  // /storage/emulated/0/Android/data/com.example.myapplication/cache

getExternalFilesDir('mytest').getAbsolutePath() // /storage/emulated/0/Android/data/com.example.myapplication/files/mytest

getExternalFilesDir(null).getAbsolutePath()  // /storage/emulated/0/Android/data/com.example.myapplication/files

以上就是淺析Android文件存儲(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于Android文件存儲(chǔ)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 欧美国产91 | 欧美日韩一区二区三区视视频 | 黄色美女免费网站 | 亚洲国产精品久久久久666 | 免费一级a毛片在线播放 | 老外一级毛片免费看 | 国产uv1区二区三区 国产va免费精品高清在线观看 | 国产vs久久 | 免费看欧美日韩一区二区三区 | 欧美一级大黄特黄毛片视频 | 国产91综合 | 91精品国产免费久久久久久 | 成人免费高清视频 | 深夜在线观看大尺度 | 99热久久国产这里是精品 | 黄色美女视频 | 久久在线影院 | 五月色一区二区亚洲小说 | 中文国产成人精品久久一区 | 国产一区二区三区久久 | jyzzjyzz国产免费观看 | 成年人免费的视频 | 免费久久精品视频 | 欧美日韩一区二区三区在线 | 一区二区三区欧美视频 | 中国成人在线视频 | 欧美亚洲国产精品久久久久 | 可以免费观看欧美一级毛片 | 亚洲乱码一区二区三区国产精品 | 午夜性刺激免费视频观看不卡专区 | 99久久成人国产精品免费 | 国产一区影视 | 国产一区二区三区在线观看精品 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 日本视频在线免费看 | 岛国大片在线播放免费 | 国产美女动态免费视频 | 国产大臿蕉香蕉大视频 | 欧美三区 | 男人女人真曰批视频播放 | 91九色国产porny |