Android 文件目錄繁多,每個(gè)目錄都有每個(gè)目錄存在的意義,將文件存儲(chǔ)在正確的目錄,有利于文件的分類(lèi)管理。
Android磁盤(pán)存儲(chǔ)可以分為兩大類(lèi),內(nèi)部存儲(chǔ)和外部存儲(chǔ)。
內(nèi)部存儲(chǔ)
內(nèi)部存儲(chǔ)不是內(nèi)存,是位于位于系統(tǒng)磁盤(pán)中一個(gè)獨(dú)特的位置。/data/ 文件夾就是內(nèi)部存儲(chǔ),內(nèi)部存儲(chǔ)中一般存儲(chǔ)一些應(yīng)用的數(shù)據(jù),如apk,shareprefence、database數(shù)據(jù),webview緩存和圖片緩存等。內(nèi)部存儲(chǔ)中還有一個(gè)文件夾每個(gè)應(yīng)用都只有一個(gè),里面中數(shù)據(jù)在應(yīng)用卸載之后,就會(huì)被刪除。結(jié)構(gòu)如:/data/data/你的應(yīng)用的包名/。其次還有一個(gè) /data/app/ 的文件夾,這里面存儲(chǔ)著我們手機(jī)上安裝的apk文件。
特點(diǎn)
- 內(nèi)部存儲(chǔ)的文件和目錄只能被我們的app自己所訪問(wèn),別的app不能訪問(wèn)。
- 內(nèi)部存儲(chǔ)中的私有目錄,當(dāng)用戶卸載app之后,改文件目錄中關(guān)于該應(yīng)用的信息就會(huì)被刪除。
- 內(nèi)部存儲(chǔ)是可用的。
- 內(nèi)部存儲(chǔ)大小有限,不適合存儲(chǔ)大量數(shù)據(jù)。
- 只有root的手機(jī),才能從手機(jī)文件管理器看見(jiàn),否則都是隱藏著的。
getCacheDir().getAbsolutePath();///data/data/包名/cache
常見(jiàn)的內(nèi)部存儲(chǔ)中有這些目錄
- /data/app/
- /data/data/包名/shared_prefs
- /data/data/包名/cache
- /data/data/包名/databases
- /data/data/包名/files
外部存儲(chǔ)
外部存儲(chǔ)并不是指拓展的SD卡,不管有無(wú)外接設(shè)備,每個(gè)Android手機(jī)都有外部存儲(chǔ)。一般的mnt或者storage目錄。外部存儲(chǔ)中分兩類(lèi)目錄,私有目錄和公有目錄,私有目錄的數(shù)據(jù)會(huì)隨著應(yīng)用的卸載而刪除,公有目錄則不會(huì)。
特點(diǎn)
- 公有目錄任何程序都可以訪問(wèn),私有目錄自身可以訪問(wèn)。
- 并不一定是可用的,因?yàn)镾D卡會(huì)被掛載。
- 外部存儲(chǔ)中的私有目錄中的數(shù)據(jù)會(huì)隨著應(yīng)用的卸載而刪除,公有目錄則不會(huì)。
公有目錄
公有目錄是任何程序都可以
- DIRECTORY_MUSIC
音樂(lè)/storage/emulated/0/Music
- DIRECTORY_PODCASTS
播客/storage/emulated/0/Podcasts
- DIRECTORY_RINGTONES
來(lái)點(diǎn)鈴聲
- DIRECTORY_ALARMS
鬧鐘/storage/emulated/0/Alarms
- DIRECTORY_NOTIFICATIONS
通知/storage/emulated/0/Notifications
- DIRECTORY_PICTURES
圖片/storage/emulated/0/Pictures
- DIRECTORY_MOVIES
電影/storage/emulated/0/Movies
- DIRECTORY_DOWNLOADS
下載文件存儲(chǔ)路徑/storage/emulated/0/Download
- DIRECTORY_DCIM
媒體文件/storage/emulated/0/DCIM
- DIRECTORY_DOCUMENTS
文檔/storage/emulated/0/Documents
我們通過(guò)Environment.getExternalStoragePublicDirectory()來(lái)獲取這些目錄
私有目錄
外部存儲(chǔ)中的私有目錄是不會(huì)自動(dòng)創(chuàng)建的,需要開(kāi)發(fā)者自己創(chuàng)建,私有目錄應(yīng)用本身無(wú)需申請(qǐng)動(dòng)態(tài)權(quán)限,就能直接訪問(wèn)。我們可以在私有目錄下新建我們自己的文件夾
- getExternalFilesDir("files目錄的子目錄名稱")
獲取應(yīng)用私有目錄files目錄中的文件目錄(/storage/emulated/0/Android/data/包名/files/子目錄)
- getExternalCacheDir()
獲取應(yīng)用cache目錄(/storage/emulated/0/Android/data/包名/cache)