Android - 文件存储
一、概念
- 機身存儲在概念上被分為了內置存儲和外置存儲,插存儲卡或外接U盤硬盤都屬于外置存儲(這年頭幾乎都不支持插卡,就算外接這種場景屬于用戶主動轉移文件,而不是APP要考慮往那里存)。
- 含有包名的路徑都可以使用Context中的方法,不含有包名的路徑和APP無關可以通過Environment中的方法來訪問。
| 其它APP能否訪問 | APP卸載后存儲的數據文件 | 讀寫權限 | ||
| 內置存儲 | 安裝目錄 data/data/包名/ | 不能 | 一起刪除 | 無需申請 |
| 外置存儲 | 私有目錄 storage/sdcard/Android/data/包名/ | 可以 | 4.4以后無需申請 | |
| 公有目錄 storage/sdcard0/名稱/ | 不會刪除 | Android10以前:使用File讀寫都系要申請權限。 Android10以后:圖片、音頻、視頻使用MediaStore,其它文件通過系統的文件選擇器訪問。自己提供的自由讀寫,只能讀別人提供的媒體文件需要申請READ_EXTERNAL_STORAGE。 | ||
| 自定義目錄 storage/sdcard0/ |
二、內置存儲 Internal Storage
路徑:data/data/包名/
存儲的數據不會被其它APP訪問到(除非Root),APP卸載會一并刪除,空間有限適合存儲小數據。files目錄存放持久化數據、cahce存放緩存數據(空間不足會被系統清理)、shared_prefs存放SharedPreference鍵值對文件,databases存放SQlite數據庫文件。
| getFilesDir( ) | 文件目錄:data/data/包名/files |
| getCacheDir( ) | 緩存目錄:data/data/包名/ceche |
| openFileOutput(String name,int mode) | 寫入文件到內部存儲files目錄,模式有MODE_PRIVATE私有、MODE_APPEND追加(重復調用不覆蓋而是接著已存在的文件后面寫)。 |
| openFileInput(String name) | 從內部存儲讀取文件 |
三、外置存儲?External Storage
存儲的數據可以被其它APP訪問到。
3.1 私有目錄
路徑:storage/emulated/Android/data/包名/
私有目錄就是Android這個文件夾,這個文件夾打開之后里邊有一個data文件夾,打開這個data文件夾,里邊有許多包名組成的文件夾。這個目錄中的文件會被計入到應用程序的占用空間當中,同時也會隨著應用程序的卸載而被刪除(這樣有利于系統維護也避免用戶的反感)。
| getExternalFilesDir( ) | 文件目錄:storage/emulated/0/Android/data/包名/files |
| getExternalCacheDir( ) | 緩存目錄:storage/emulated/0/Android/data/包名/cache |
| getExternalMediaDir | 已廢棄:storage/emulated/0/Android/media |
3.2 公有目錄
路徑:storage/emulated/0/
由系統創建的公有目錄有九大類:DCIM相機、Screenshots截圖、Download下載、Pictures圖片、Movies電影、Documents文檔、Music音樂、Ringtones鈴聲、Alarms鬧鈴、Notifications通知音。存儲的文件不會計入到應用程序的占用空間當中,APP刪除后不會刪除存儲在這里的數據。
| Environment.getExternalStorageDirectory() | 根目錄:storage/emulated/0 |
| Environment.getExternalStoragePublicDirectory(DIRECTORY_DCIM) Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS) | 相機目錄:storage/sdcard0/DCIM 鬧鈴目錄:storage/sdcard0/Alarms |
3.3?自定義目錄
路徑:storage/sdcard0/
手動在外置存儲的根目錄下創建自定義文件夾,APP刪除后不會刪除存儲在這里的數據。由于Android10中加入了作用域存儲功能,
總結
以上是生活随笔為你收集整理的Android - 文件存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像配准】基于光流场算法Horn_Sc
- 下一篇: 油酸Oleic acid/氨基NH2/羧