电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

淺析Android文件存儲

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

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

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

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

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

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

android.permission.WRITE_EXTERNAL_STORAGE

android.permission.READ_EXTERNAL_STORAGE

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

淺析Android文件存儲

淺析Android文件存儲

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

/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ù)庫所產(chǎn)生的 **/data/data/應(yīng)用包名/databases/** 文件夾,這里就不一一舉例。

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

二、外部存儲

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

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

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

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

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

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

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卡的話,那么它打印的路徑就有兩條了,例如我的華為榮耀 7 插了SD卡,它的結(jié)果如下:

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

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

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

一般對于外部存儲可以分為兩類,外部公有和外部私有。

2.1、外部公有

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

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

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

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

<!-- 外部存儲寫入數(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)之后需要申請用戶權(quán)限,并獲得用戶授權(quán),才能讀寫文件。

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

我們可以通過 Environment 對象,訪問讀寫公共目錄的文件。

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

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)前是可正常讀寫的。

接下來讓我們看看相關(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、外部私有

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

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

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

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

私有目錄地址:/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文件存儲的詳細(xì)內(nèi)容,更多關(guān)于Android文件存儲的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 保健品OEM贴牌代加工厂家_德州健之源| 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 黄石妇科医院_黄石东方女子医院_黄石东方妇产医院怎么样 | 好杂志网-首页 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 原子吸收设备-国产分光光度计-光谱分光光度计-上海光谱仪器有限公司 | 亮点云建站-网站建设制作平台| 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 精密模具加工制造 - 富东懿 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | U拓留学雅思一站式服务中心_留学申请_雅思托福培训 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 学习安徽网| 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 房间温控器|LonWorks|海思| EFM 022静电场测试仪-套帽式风量计-静电平板监测器-上海民仪电子有限公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 |