-
簡介
- Android設備,有3個地方的文件存儲位置,他們分別是:
- 內部存儲空間(用戶無法瀏覽到此目錄)
- 外部存儲空間(就是手機自身的文件管理目錄,用戶可以瀏覽)
- SD卡的存儲空間(需要插入T卡)
- SharedPreferences目錄
- 存儲數據庫DB目錄
內部存儲空間
內部存儲空間的獲取都需要使用Context.
方法
getFilesDir();
對應內部存儲的路徑為: data/data/packagename/files
String filesDir = getApplicationContext().getFilesDir().getPath();
getCacheDir();
對應內部存儲的路徑為:data/data/packagename/cache ,cache是緩存的意思,這些文件一旦設備內部存儲空間不足時,這些保存在cache下的文件會刪除,不要指望系統為你刪除,一般需要自己設定閾值,一旦系統滿時,系統也會刪掉cache!---- 一般聊天記錄都會使用
String cacheDir = getApplicationContext().getCacheDir().getPath();
處理文件方法
openFileInput();和openFileOutput();
這2個方法對data/data/packagename/files目錄下操作文件
fileList();
方法是用來列出該data/data/packagename/files目錄下的所有文件
deleteFile(String name);
用來刪除該files目錄下的文件
外部存儲空間
外部存儲空間有2種不同目錄的文件路徑,他們分別需要使用Context和Environment來獲取,下面我們逐個介紹獲取方式與對應路徑
需要使用Context獲取方法
使用上下文獲取的路徑主要是/android/data/你的包名/ 此目錄下的路徑
getExternalCacheDir();
對應外部存儲路徑:/storage/emulated/0/Android/data/packagename/cache 此方法為獲取cache緩存文件
String externalCacheDir = getApplicationContext().getExternalCacheDir().getPath();
getExternalCacheDirs();
對應外部存儲路徑:/storage/emulated/0/Android/data/packagename/cache 此方法為獲取cache下所以文件數組集合
File[] externalCacheDirs = getApplicationContext().getExternalCacheDirs();
getExternalFilesDir(String type);
對應外部存儲路徑:/storage/emulated/0/Android/data/packagename/files 此方法獲取files文件下的指定文件,這里的參數可以傳入null也可以傳入一個文件名
String externalFilesDir = getApplicationContext().getExternalFilesDir(null).getPath();
getExternalFilesDirs(String type);
對應外部存儲路徑:/storage/emulated/0/Android/data/packagename/files 此方法獲取files文件指定目錄的文件數組集合,這里的參數可以傳入null也可以傳入一個文件名
File[] externalFilesDirs = getApplicationContext().getExternalFilesDirs(null);
getExternalMediaDirs();
對應外部存儲路徑:/storage/emulated/0/Android/media/packagename 此方法獲取包名路徑下的文件數組集合
File[] externalMediaDirs = getApplicationContext().getExternalMediaDirs();
需要使用Environment獲取方法
getExternalStorageState();
獲取sd卡狀態,此方法返回的是String類型,一共有以下幾種類型:
- MEDIA_UNKNOWN SD卡未知
- MEDIA_REMOVED SD卡移除
- MEDIA_UNMOUNTED SD卡未安裝
- MEDIA_CHECKING SD卡檢查中,剛裝上SD卡時
- MEDIA_NOFS SD卡為空白或正在使用不受支持的文件系統
- MEDIA_MOUNTED SD卡安裝
- MEDIA_MOUNTED_READ_ONLY SD卡安裝但是只讀
- MEDIA_SHARED SD卡共享
- MEDIA_BAD_REMOVAL SD卡移除錯誤
- MEDIA_UNMOUNTABLE 存在SD卡但是不能掛載,例如發生在介質損壞
String externalStorageState = Environment.getExternalStorageState(); if (externalStorageState.equals(Environment.MEDIA_MOUNTED)){ //sd卡已經安裝 }
getExternalStorageDirectory();
對應外部存儲路徑:/storage/emulated/0 此方法獲取外部存儲根目錄路徑
String externalStorageDirectory = Environment.getExternalStorageDirectory().getPath();
getExternalStoragePublicDirectory(String type);
獲取外部存儲的共享文件夾路徑(就是拍照文件夾/下載文件夾/音樂文件夾這些系統的共享文件夾),使用的時候參數必需攜帶路徑類型,且不能為null.
以相機DCIM目錄為例子對應獲取的路徑為:/storage/emulated/0/DCIM
String externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath();
- DIRECTORY_MUSIC 音樂目錄
- DIRECTORY_PODCASTS 播客目錄
- DIRECTORY_RINGTONES 鈴聲目錄
- DIRECTORY_ALARMS 警報(鬧鍾/定時器)鈴聲目錄
- DIRECTORY_NOTIFICATIONS 提示音目錄
- DIRECTORY_PICTURES 圖片目錄
- DIRECTORY_MOVIES 電影目錄
- DIRECTORY_DOWNLOADS 下載目錄
- DIRECTORY_DCIM 相機拍照或錄像文件的存儲目錄
- DIRECTORY_DOCUMENTS 文件文檔目錄
系統存儲空間
getRootDirectory();
對應獲取系統分區根路徑:/system 此方法是獲取系統根目錄路徑,返回包含核心Android操作系統的“系統”分區的根目錄,始終以只讀方式顯示和安裝。
String rootDirectory = Environment.getRootDirectory().getPath();
getDataDirectory();
對應獲取用戶數據目錄路徑:/data 返回用戶數據目錄
String dataDirectory = Environment.getDataDirectory().getPath();
getDownloadCacheDirectory();
對應獲取用戶緩存目錄路徑:/data/cache 返回下載/緩存內容目錄
String downloadCacheDirectory = Environment.getDownloadCacheDirectory().getPath();