ndfweb.cn

Android存儲及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()區別


2020-06-21 21:31:34 (3486)



原文鏈接:https://blog.csdn.net/Kelaker/article/details/80471352

存儲介紹


Android係統分為內部存儲和外部存儲,內部存儲是手機係統自帶的存儲,一般空間都比較小,外部存儲一般是SD卡的存儲,空間一般都比較大,但不一定可用或者剩餘空間可能不足。一般我們存儲內容都會放在外部存儲空間裏。使用過程注意事項:


先判斷SD卡是否可用,可用時優先使用SD卡的存儲,不可用時用內部存儲

存儲在SD卡上時,可以在SD卡上新建任意一個目錄存放,也可以存放在應用程序內部文件夾,區別是在SD卡的任意目錄存放時內容不會隨應用程序的卸載而消失,而在應用程序內部的內容會隨應用程序卸載消失。

一般緩存文件放在應用程序內部,用戶主動保存的文件放在SD卡上的文件夾裏。如果在SD卡上任意新建目錄存放所有數據,用戶卸載時會殘存大量文件,招致用戶反感。

存儲路徑


一般我們可以通過 Context 和 Environment 相關的方法獲取文件存取的路徑。


1.內部存儲


1.1 根目錄($rootDir):/data,通過 Environment.getDataDirectory() 獲取。 

1.2 應用程序目錄($applicationDir):$rootDir/data/包名(不一定,不同設備可能不同) 

應用緩存目錄:$applicationDir/cache,通過Context.getCacheDir()獲取。 

應用文件目錄:$applicationDir/files,通過Context.getFilesDir()獲取。Context.getFileStreamPath(String name)返回以name為文件名的子文件目錄,若name為空,則返回文件根目錄。假設我們的應用程序包名為com.learn.test,路徑如下:


Environment.getDataDirectory():      /data

Context.getCacheDir():               /data/data/com.learn.test/cache

Context.getFilesDir():               /data/data/com.learn.test/files

Context.getFileStreamPath(""):       /data/data/com.learn.test/files

Context.getFileStreamPath("test"):   /data/data/com.learn.test/files/test

1

2

3

4

5

6



2.外部存儲


2.1 根目錄($rootDir):/storage/emulated/0(不一定,不同設備可能不同),通過 Environment.getExternalStorageDirectory() 獲取。 

2.2 應用程序目錄($applicationDir):$rootDir/Andorid/data/包名 

應用緩存目錄:$applicationDir/cache,通過Context.getExternalCacheDir()獲取。 

應用文件目錄:$applicationDir/files,通過Context.getExternalFilesDir(String type),type為空字符串時獲取。type係統給我們提供了很多常用的類型,比如圖片和下載等等:


public static String DIRECTORY_MUSIC = "Music";

public static String DIRECTORY_ALARMS = "Alarms";

public static String DIRECTORY_NOTIFICATIONS = "Notifications";

public static String DIRECTORY_PICTURES = "Pictures";

public static String DIRECTORY_MOVIES = "Movies";

public static String DIRECTORY_DOWNLOADS = "Download";

public static String DIRECTORY_DCIM = "DCIM";

public static String DIRECTORY_DOCUMENTS = "Documents";

1

2

3

4

5

6

7

8

9

假設我們的應用程序包名為com.learn.test,路徑如下:


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

Context.getExternalCacheDir():                           /storage/emulated/0/Android/data/com.learn.test/cache

Context.getExternalFilesDir(""):                         /storage/emulated/0/Android/data/com.learn.test/files

Context.getExternalFilesDir("test"):                     /storage/emulated/0/Android/data/com.learn.test/files/test

Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES):    /storage/emulated/0/Android/data/com.learn.test/files/Pictures

1

2

3

4

5

2.3 公共存儲目錄: 我們可以在外部存儲上新建任意文件夾,不過在6.0及之後的係統需要動態申請權限,這些目錄的內容不會隨著應用的卸載而消失。如:


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

Environment.getExternalStoragePublicDirectory(""):             /storage/emulated/0

Environment.getExternalStoragePublicDirectory("test"):         /storage/emulated/0/test

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

1

2

3

4

參考


Android 存儲使用參考



本文版权:http://www.ndfweb.cn/news-798.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2024 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅