Android 資料夾簡單介紹
Android 資料夾簡單介紹
現在有很多的android開發人員對android檔案的使用還不規範,要麼把所有的東西都存在SD卡上,要不就把所有的東西都存在應用內部儲存裡.甚至有許多的開發人員連這麼目錄的含義是什麼都不瞭解.這裡就簡單介紹一下android的資料夾使用.也只是個人的一些理解,用做拋磚引玉.
android 資料夾的組成
android裡資料夾是分為三個種類的.
- 應用內部儲存—–隨應用解除安裝刪除
- 應用拓展儲存—–位於SD卡,隨應用解除安裝刪除
- android sd卡—–用於儲存公有檔案,不隨應用解除安裝刪除
下面就來詳細介紹以下向個資料夾.
android 應用內部儲存
應用記憶體儲位於/data/data/package_name/資料夾下,如我應用的包名是 com.android.dir.demo,則此用的應用記憶體儲就位於/data/data/com.android.dir.demo/下.此資料夾除非root,否則只有自己可訪問.用於儲存一些私密的資訊.如使用者資訊等.會隨者應用解除安裝而刪除.
一般這裡面會包含有幾個檔案files ,lib,cache等,詳細介紹如下
路徑名 | 作用 |
---|---|
lib | 用由存放so動態庫 |
cache | 用於存放快取資料 |
files | 用於存放應用產生的檔案,如日誌等 |
shared_prefs | 存放 SharedPreferences生成的檔案,注意:如模式設定錯誤,則可能被其它應用讀取 |
datbases | 存放資料庫檔案,一系統自動建立 |
這裡一般我們會使用到的資料夾只有cache和files,其它都是用系統自動建立的,或取其對應的File物件方式為
//獲取到files的檔案物件
File filesDir = context.getFilesDir();
//獲取到cache的檔案物件
File cacheDir = context.getCacheDir();
android拓展儲存
目錄位於SdCard/Android/data/package_name/下,這個是google為會規範app對SD卡的使用推出的,以前在app如果需要在SD卡上存一個檔案,一般都會在SD卡的根目錄下建一個.package_name檔案隱藏檔案,但是這樣做的壞處就是如果應用被解除安裝,這裡的資料就會變成垃圾資料.但是如果應用把檔案放在拓展儲存下的話,就是隨著應用的解除安裝而被清理掉.不會形成垃圾資料.而且這樣做還有一個好處,那就是在SDK>=19時,是可以不用申請SD卡讀寫許可權的.
但是這裡也存在一個問題,那就是這裡的目錄是可以被任意應用訪問的,所以這裡適合一儲存一此不敏感的資料,比如圖片的快取,一些音視訊檔案等.
具體的呼叫方法如下
File file2 = context.getExternalFilesDir(null);
File cache = context.getExternalCacheDir();
呼叫以上方法,/Android/data/{package_name}/files/和/Android/data/{package_name}/cache/就會自動的被建立成功.
android sd卡
現在Google官方已以不建議應用直接在SD卡上建立檔案了,所以除非必要,還是要把檔案建立在這裡.除了可能會產生垃圾資料這一點之外,還有一個問題,就是往SD卡了寫檔案,是需要申請許可權的.如果使用者拒絕了,那app就不能在SD卡上寫檔案了,同時由於拓展儲存也是位於SD卡上,如果使用者關閉了SD的讀寫許可權,那就會造成拓展儲存也無法使用.
如果需要使用SD卡,則需要事先申請許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
使用是需要判斷是否擁有SD卡,
public File getSDPath(){
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED);//判斷sd卡是否存在
if(sdCardExist)
{
sdDir = Environment.getExternalStorageDirectory();//獲取跟目錄
}
return sdDir;
}