1. 程式人生 > >Android內部和外部儲存解析

Android內部和外部儲存解析

安卓手機的儲存分為 2 部分,內部儲存 ( Internal ) 和外部儲存 ( External )

內部儲存指的是系統儲存空間,需要root許可權才能訪問,像SharedPreferenced和DataBase的資料都是儲存在這裡面

###一、外部儲存分為兩部分 1.機器自帶的儲存,也就是常說的16G,32G,64G 2.SD卡(TF卡)

###二、詳細分析 1.Ram,Rom,以及擴充套件儲存(TF卡)的區別;內部儲存,外部儲存的區別

2.4.4以前,內建儲存就是內部儲存,外接SD卡就是外接儲存。我們通過getDataDirectory()就可以獲取內建儲存根路徑,通過getExternalStorageDirectory()就可以獲取外接SD卡根路徑。 4.4以後外部儲存就包含兩部分了,其中通過getExternalStorageDirectory獲取的是機身儲存的外部儲存,而外接SD卡我們則需要通過getExternalFilesDir()遍歷來獲取了。

###三、Internal Storage(內部儲存) 空間很小,所以應該正確的使用它,因此用於儲存一些重要的資料庫檔案以及一些使用者的配置檔案。 內部儲存的路徑:/data/data/0/packagename/files

1.files目錄

getFileDir()

/data/data/packageName/files/

2.內部快取目錄 getCacheDir()

/data/data/packageName/cache/

3.配置檔案 getDir(“fileName.txt”,Context.MODE_PRIVATE)

/data/data/packageName/app_fileName.txt app_是系統自己加上去的

###四、External Storage(外部儲存) 1.概念 最容易混淆的是外部儲存,因為老的Android系統的跟新的Android系統是有差別的,很多人去網上查詢資料,看了一下以前的資料,又看了一下現在的資料,但是發現它們說法不一樣然後就困惑了。首先說一個大家普遍的概念“如果在pc機上是區分外部儲存和內部儲存的話,那麼電腦自帶的硬碟算是內部儲存,U盤或者行動硬碟就是外部儲存了。”因此很多人帶著這樣的理解去看待安卓手機,把內建儲存(機身儲存)當做內部儲存,而把擴充套件的SD卡當做是外部儲存。 這麼認為確實沒錯,因為在4.4(API19)以前的手機上確實是這樣的,手機自身帶的儲存卡就是內部儲存,而擴充套件的SD卡就是外部儲存。但是從4.4的系統開始,很多的中高階機器都將自己的機身儲存擴充套件到了8G以上,比如有的人的手機是16G的,有的人的手機是32G的,但是這個16G,32G是內部儲存嗎,不是的!!!,它們依然是外部儲存,也就是說4.4系統及以上的手機將機身儲存儲存(手機自身帶的儲存叫做機身儲存)在概念上分成了”內部儲存internal” 和”外部儲存external” 兩部分。既然16G,32G是外部儲存,那有人又有疑惑了,那4.4系統及以上的手機要是插了SD卡呢,SD卡又是什麼呢,如果SD卡也是外部儲存的話,那怎麼區分機身儲存的外部儲存跟SD卡的外部儲存呢?對,SD卡也是外部儲存,那怎麼區分呢,在4.4以後的系統中,API提供了這樣一個方法來遍歷手機的外部儲存路徑

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

操作外部儲存必須的許可權(當你申請了write許可權,那麼read許可權預設也就通過啦)

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

狀態判斷

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState)){
	//SD卡已掛載
}

而外部儲存又分為公有目錄和私有目錄

2.外部儲存公有目錄 當我們刪除應用之後,還應該保留在手機上的資料,例如拍照的照片,不應該隨著刪除應用而被刪除掉。對於這類檔案,Android給我們提供了特定的目錄,這些目錄都是以DIRECTORY開頭的,例如:DIRECTORY_MUSIC , DIRECTORY_PICTURES.

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
/storage/emulated/0/Pictures

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
/storage/emulated/0/Music

3.外部儲存的根目錄 Environment.getExternalStorageDirectory()

/storage/emulated/0

4.外部儲存私有目錄 Android 4.4以後訪問該目錄不再需要許可權

5.files目錄 getExternalFilesDir(String type)

/storage/emulated/0/Android/data/<包名>/files/

6.快取目錄 getExternalCacheDir()

/storage/emulated/0/Android/data/<包名>/cache

五、/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之間的關係

最後

如果你看到了這裡,覺得文章寫得不錯就給個讚唄!歡迎大家評論討論!如果你覺得那裡值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術乾貨。感興趣的小夥伴可以點一下關注哦。謝謝!

相關推薦

Android內部外部儲存解析

安卓手機的儲存分為 2 部分,內部儲存 ( Internal ) 和外部儲存 ( External ) 內部儲存指的是系統儲存

android獲取手機內部儲存空間外部儲存空間

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android內部儲存外部儲存以及快取清理記憶體清理!

android內部的儲存結構和路徑獲取方法:清除本地資料和快取:計算快取和記憶體資料的大小:計算快取大小以及刪除的方法:這文章裡面的檔案刪除方法有一些問題:沒有迴圈是資料夾的刪除方法;另外:File.list(); 獲取的是該資料夾下的所有子檔案的相對路徑;File.list

Android Studio——android中的檔案操作詳解以及內部儲存外部儲存

原文連結:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0923/1557.html 其實安卓檔案的操作和java在pc環境下的操作並無二致,之所以需要單獨講解是因為安卓系統提供了不同於

Atitit 儲存方法大總結 目錄 1. 儲存方式分類 2 1.1. 按照資料分類為 結構化 半結構化 非結構化 2 1.2. 按照內外部可分類 內部儲存外部儲存持久化 2 1.3. 按照本地遠

Atitit 儲存方法大總結   目錄 1. 儲存方式分類 2 1.1. 按照資料分類為  結構化 半結構化 非結構化 2 1.2. 按照內外部可分類 內部儲存和外部儲存持久化 2 1.3. 按照本地遠端分類 分散式儲存等 2 1.4. 臨時性cach

Android PriorityQueuePriorityBlockingQueue原始碼解析

尊重原創,轉載請標明出處   http://blog.csdn.net/abcdef314159 原始碼:\sources\Android-25 PriorityQueue通過名字也可以看的出來,是優先佇列,PriorityBlockingQueue是優先阻

iOS使用TestFlight進行內部外部人員測試

轉載註明出處:https://www.jianshu.com/p/94eb388b5a36 前言 在iOS 8中,蘋果釋出了一個叫做TestFlight的新玩意,用於將Beta測試流水化。此前你可能聽說過這個東西,因為TestFlight作為一個獨立的測試平臺已經有些年頭了。不過在今年二月份

tmux內部外部之間互相複製貼上

在tmux內複製一段文字到緩衝區後,可以貼上到其他面板,視窗,甚至是其他會話,但是還是不能貼上到其他應用(如firefox),這時候可以用xclip。 安裝xclip後,在.tmux.conf中增加

Android InternalExternal儲存

關於Internal和External,有一篇文章描述很好:http://www.open-open.com/lib/view/open1462850158141.html,本文只在此基礎上進行補充和總結。 (1)external:包括手機內部儲存分出來的external

Android:讀寫外部儲存檔案

1.讀寫外部儲存檔案需要許可權 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 2.MainActivity.java import andr

解析Android內部儲存外部儲存的區別

1、背景 在開發過程中我們都會使用到手機的內部快取、外部快取。但有些開發者對這兩個儲存區域理解還夠透徹,以為手機內建的儲存卡(不可手機移除)就是內部儲存, 可插拔的SD卡就是外部儲存,其實這些理解都是有誤的。這個知識點本人也重複看過好幾次,但每次看完,過一段

android獲取外部儲存內部儲存路徑

StorageManager sm = (StorageManager) activity.getSystemService(Context.STORAGE_SERVICE); // 獲取sdcard的路徑:外部儲存和內部儲存 String[] paths

Android 外部儲存,內部儲存路徑

import android.content.Context; import android.os.Environment; import android.util.Log; public class DirectoryUtils { private static final String

Android 本地儲存外部儲存/內部儲存路徑獲取大全

//:/system String rootDir = Environment.getRootDirectory().toString(); System.out.println("Environment.getRootDirectory()=:" +

Android五種資料儲存方式之檔案儲存 內部儲存 外部儲存 檔案讀取儲存操作封裝

檔案儲存 前言 檔案儲存 記憶體 內部儲存 外部儲存 內部儲存操作 API 讀寫操作 外部儲存操作 公共目錄 私有目錄

11.17 域名解析DNS---------快取記憶體DNS,權威DNS的正反向解析,輪詢:域名轉換,,郵箱解析內部解析外部解析

1.概念的介紹 1)DNS DNS(Domain Name System,域名系統),全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。 2)快取記憶體DNS服務 快取記憶體DNS服務的作用:正常上網

Android Environment.getExternalStorageDirectory() 獲取的是內部儲存還是外部儲存

這幾天在做Android應用的遠端更新功能,將下載的更新包放在移動裝置上指定的目錄。用的是  Environment.getExternalStorageDirectory() 這個方法,然後在獲取的目錄中新建一個hkapp資料夾,用來存放下載的apk檔案。 那麼,這個hk

Android如何程式設計設定APP安裝位置(外部儲存內部儲存)?

Beginning with API Level 8, you can allow your application to be installed on the external storage (for example, the device's SD card).

Android外部儲存/內部儲存路徑獲取大全

String publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); (adsbygoogle = window.ads

徹底理解android中的內部儲存外部儲存

我們先來考慮這樣一個問題: 開啟手機設定,選擇應用管理,選擇任意一個App,然後你會看到兩個按鈕,一個是清除快取,另一個是清除資料,那麼當我們點選清除快取的時候清除的是哪裡的資料?當我們點選清除資料的時候又是清除的哪裡的資料?讀完本文相信你會有答案。 在android開發中