android應用相關目錄的存取方式與函數解析---全

來源:互聯網
上載者:User

標籤:android

android應用基本都需要進行檔案的儲存工作,以前總是需要的時候從網上隨便搜搜,但是沒有去做一個總結,今天不能在拖了,來做個總結!

很基礎的東西,小白一個,真心希望能幫到大家,錯誤的地方大家指點一下

我遇見的檔案讀取問題一般有這幾個:檔案儲存在哪?以及如何考慮相關函數,目錄許可權的問題?以及刪除應用之後目錄是否會隨之刪除的問題?

一般儲存的路徑有三種:

比如應用的名字叫做com.android.framework

1.   /data/data/package_name/
該目錄是只對應用可見的,而且如果手機沒有root,用adb也是看不了這個目錄,該目錄用來儲存和應用周期相關的檔案,會隨著應用的卸載一起刪除掉

/data/data/com.android.framework/shared_prefs/   用來儲存SharedPreference

/data/data/com.android.framework/databases/  用來儲存資料庫DB,相關函數還有getDatabasePath()

/data/data/com.android.framework/app_webview    和    /data/data/package_name/xxxwebviewcachexxx  用來儲存應用內建webview所產生的cache和cookies等,該目錄由於android版本不同名字和位置也可能不同
/data/data/com.android.framework/lib   用來儲存該應用的.so靜態庫檔案
/data/data/com.android.framework/cache   該目錄可以使用函數getCacheDir()擷取
/data/data/com.android.framework/files     該目錄可以使用函數getFilesDir()擷取,openFileInput()和openFileOutput()函數也是在該目錄下操作檔案,fileList()函數是用來列出該files目錄下的所有檔案,deleteFile(String name)用來刪除該files目錄下的檔案
/data/data/com.android.framework/    這個目錄下面當然也能夠建立子集的目錄,使用的方法就是getDir(String name, int mode),參數中的name就是需要在該目錄下建立的子目錄名字

你如果能夠開啟應用的該目錄,一般會在該目錄下看到很多子目錄
註:以上函數沒有明確指定的都是使用context調用

PS:
還有一個特別奇怪的函數,無意中看見的getCodeCacheDir()函數,該函數的解釋為This location is optimal for storing compiled or optimized code generated by your application at runtime,該目錄適合在運行時存放應用產生的編譯或者最佳化的代碼,但是我調用就報了NoSuchMethodError,忘賜教~~

還有其他的相關函數

getPackageCodePath() = /data/app/com.android.framework-1.apk
getPackageResourcePath() = /data/app/com.android.framework-1.apk


2.   SD卡Android目錄下的兩個子目錄
註:該目錄是掛載到SD卡下面的,所以SD不可用時,這兩個目錄都是無效的,同樣和應用周期相關的檔案,會隨著應用的卸載一起刪除掉

注意需要許可權   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 (1)Android/data/package_name/  

Android/data/com.android.framework/files/   該目錄可用getExternalFilesDir(String type)和getExternalFilesDirs(String type)擷取,參數type為子目錄名字,null則為根目錄,後者調用之後會自動產生該目錄

Android/data/com.android.framework/cache/ 該目錄可用getExternalCacheDir()和getExternalCacheDirs()擷取,後者調用之後自動產生該目錄

(2)Android/obb/package_name/ (obb目錄也可能不存在),原文:Note if the application does not have any OBB files, this directory may not exist


該目錄的的相關函數簡單只有兩個:getObbDirs()和getObbDir(),前者調用之後會自動產生該目錄,該目錄一般是遊戲的資料包目錄

3.   SD卡下面自訂的一個檔案目錄

除了上邊兩個目錄之外,當然還能在SD卡下自訂目錄,一般用來永久儲存,卸載應用之後不會刪除,相關函數如下

Environment.getExternalStorageState(),這個函數用來擷取SD卡的掛載狀態,如果傳入參數path則是擷取該路徑的的掛載狀態,比如這個目錄被使用者的PC掛載,或者從裝置中移除,或者其他問題發生,狀態的返回是不一樣的
Environment.getExternalStorageDirectory(),該函數用來返回SD卡的根目錄,即/storage/emulated/0/,注意不要在根目錄下建立檔案,強烈建立建立一個子目錄去操作,要不然會汙染SD卡的主目錄,函數中還有一段介紹It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions),該目錄所有應用都可操作,為共用目錄
Environment.getDownloadCacheDirectory(),該函數用來返回SD卡下面的下載快取目錄
Environment.getDataDirectory(),該函數用來擷取使用者的資料目錄
Environment.getExternalStoragePublicDirectory(String type),該函數用來根據類型返回相關目錄,類型為Environment的一些變數,傳入的型別參數不能是null,返回的目錄路徑有可能不存在,所以必須在使用之前確認一下,沒有就建立該目錄
Environment.getRootDirectory(),該函數用來返回根System目錄,只掛載為唯讀
最後所有目錄的代碼返回結果測試如下
L.e("getDatabasePath():"+getDatabasePath("student.db"));L.e("getCacheDir():"+getCacheDir());L.e("getFilesDir():" + getFilesDir());String[] strings = fileList();//為空白for (String path : strings){   L.e("fileList():---" + path);}L.e("getDir(\"zhao\"):" + getDir("zhao", MODE_PRIVATE));//        L.e("getCodeCacheDir():" + getCodeCacheDir()); //java.lang.NoSuchMethodErrorL.e("getPackageCodePath():" + getPackageCodePath());L.e("getPackageResourcePath():" + getPackageResourcePath());L.e("getExternalFilesDir():" + getExternalFilesDir(null));File[] paths = getExternalFilesDirs(null);for (File path : paths){    L.e("getExternalFilesDirs():---" + path.getPath());}L.e("getExternalCacheDir():" + getExternalCacheDir());paths = getExternalCacheDirs();for (File path : paths){   L.e("getExternalCacheDirs():---" + path.getPath());}paths = getObbDirs();for (File path : paths){    L.e("getObbDirs():---" + path.getPath());}L.e("Environment.getExternalStorageState():"+ Environment.getExternalStorageState());L.e("Environment.getExternalStorageDirectory():"+Environment.getExternalStorageDirectory());L.e("Environment.getDownloadCacheDirectory():"+Environment.getDownloadCacheDirectory());L.e("Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC):"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));L.e("Environment.getRootDirectory():"+Environment.getRootDirectory());


E/com.android.framework﹕ getDatabasePath():/data/data/com.android.framework/databases/student.dbE/com.android.framework﹕ getCacheDir():/data/data/com.android.framework/cacheE/com.android.framework﹕ getFilesDir():/data/data/com.android.framework/filesE/com.android.framework﹕ getDir("zhao"):/data/data/com.android.framework/app_zhaoE/com.android.framework﹕ getPackageCodePath():/data/app/com.android.framework-1.apkE/com.android.framework﹕ getPackageResourcePath():/data/app/com.android.framework-1.apkE/com.android.framework﹕ getExternalFilesDir():/storage/emulated/0/Android/data/com.android.framework/filesE/com.android.framework﹕ getExternalFilesDirs():---/storage/emulated/0/Android/data/com.android.framework/filesE/com.android.framework﹕ getExternalCacheDir():/storage/emulated/0/Android/data/com.android.framework/cacheE/com.android.framework﹕ getExternalCacheDirs():---/storage/emulated/0/Android/data/com.android.framework/cacheE/com.android.framework﹕ getObbDirs():---/storage/emulated/0/Android/obb/com.android.frameworkE/com.android.framework﹕ Environment.getExternalStorageState():mountedE/com.android.framework﹕ Environment.getExternalStorageDirectory():/storage/emulated/0E/com.android.framework﹕ Environment.getDownloadCacheDirectory():/cacheE/com.android.framework﹕ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC):/storage/emulated/0/MusicE/com.android.framework﹕ Environment.getRootDirectory():/system


                                                                                                                                                                                                                                                             

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

android應用相關目錄的存取方式與函數解析---全

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.