Android應用程式目錄定義及使用方法

mingy的專欄發表於2014-09-28

一、方法介紹:        

每個Android應用程式都可以通過Context來獲取與應用程式相關的目錄,這些目錄的功能各異,每一個目錄都有自己的特點,有時候可能會搞混淆,本文結合android原始碼註釋和實際操作,詳細介紹一下每個方法:

方法:getFilesDir

釋義:返回通過Context.openFileOutput()建立和儲存的檔案系統的絕對路徑,應用程式檔案,這些檔案會在程式被解除安裝的時候全部刪掉。

方法:getCacheDir

釋義:返回應用程式指定的快取目錄,這些檔案在裝置記憶體不足時會優先被刪除掉,所以存放在這裡的檔案是沒有任何保障的,可能會隨時丟掉。

方法:getDir

釋義:這是一個可以存放你自己應用程式自定義的檔案,你可以通過該方法返回的File例項來建立或者訪問這個目錄,注意該目錄下的檔案只有你自己的程式可以訪問。

方法:getExternalCacheDir

釋義:使用這個方法需要寫外部儲存的許可權“<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />”,呼叫該方法會返回應用程式的外部檔案系統(Environment.getExternalStorageDirectory())目錄的絕對路徑,它是用來存放應用的快取檔案,它和getCacheDir目錄一樣,目錄下的檔案都會在程式被解除安裝的時候被清除掉。

方法:getExternalFilesDir

釋義:使用這個方法需要寫外部儲存的許可權“<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />”,這個目錄是與應用程式相關的外部檔案系統,它和getExternalCacheDir不一樣的是隻要應用程式存在它就會一直存在,這些檔案只屬於你的應用,不能被其它人訪問。同樣,這個目錄下的檔案在程式被解除安裝時也會被一同刪除。

方法:getExternalFilesDir

釋義:和上面的方法一樣,只是返回的是其目錄下某一型別的檔案,這些型別可以是:
Environment#DIRECTORY_MUSIC 音樂
Environment#DIRECTORY_PODCASTS 音訊
Environment#DIRECTORY_RINGTONES 鈴聲
Environment#DIRECTORY_ALARMS 鬧鈴
Environment#DIRECTORY_NOTIFICATIONS 通知鈴聲
Environment#DIRECTORY_PICTURES 圖片
Environment#DIRECTORY_MOVIES 視訊

方法:getDatabasePath

釋義:儲存通過Context.openOrCreateDatabase 建立的資料庫檔案

方法:getPackageCodePath

釋義:返回android 安裝包的完整路徑,這個包是一個zip的壓縮檔案,它包括應用程式的程式碼和assets檔案。

方法:getPackageResourcePath

釋義:返回android 安裝包的完整路徑,這個包是一個ZIP的要鎖檔案,它包括應用程式的私有資源。

方法:getObbDir

釋義:返回應用程式的OBB檔案目錄(如果有的話),注意如果該應用程式沒有任何OBB檔案,這個目錄是不存在的。

二、測試程式:

測試程式碼如下:

private StringBuilder getFilePath( ){
		StringBuilder filePathBuilder = new StringBuilder( );

		// 返回通過Context.openFileOutput()建立和儲存的檔案系統的絕對路徑,應用程式檔案,這些檔案會在程式被解除安裝的時候全部刪掉。
		filePathBuilder.append( "getFilesDir == " ).append( getFilesDir( ) ).append( "\n" );
		// 返回應用程式指定的快取目錄,這些檔案在裝置記憶體不足時會優先被刪除掉,所以存放在這裡的檔案是沒有任何保障的,可能會隨時丟掉。
		filePathBuilder.append( "getCacheDir == " ).append( getCacheDir( ) ).append( "\n" );
		// 這是一個可以存放你自己應用程式自定義的檔案,你可以通過該方法返回的File例項來建立或者訪問這個目錄,注意該目錄下的檔案只有你自己的程式可以訪問。
		filePathBuilder.append( "getDir == " ).append( getDir("test.txt", Context.MODE_WORLD_WRITEABLE) ).append( "\n" );

		/* 需要寫檔案許可權 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> */
		// 呼叫該方法會返回應用程式的外部檔案系統(Environment.getExternalStorageDirectory())目錄的絕對路徑,它是用來存放應用的快取檔案,它和getCacheDir目錄一樣,目錄下的檔案都會在程式被解除安裝的時候被清除掉。 
		filePathBuilder.append( "getExternalCacheDir == " ).append( getExternalCacheDir( ) ).append( "\n" );
		// 這個目錄是與應用程式相關的外部檔案系統,它和getExternalCacheDir不一樣的是隻要應用程式存在它就會一直存在,這些檔案只屬於你的應用,不能被其它人訪問。同樣,這個目錄下的檔案在程式被解除安裝時也會被一同刪除。
		filePathBuilder.append( "getExternalFilesDir == " ).append( getExternalFilesDir( "/" ) ).append( "\n" );

		/**
		 * 和上面的方法一樣,只是返回的是其目錄下某一型別的檔案,這些型別可以是:
		 * Environment#DIRECTORY_MUSIC 音樂
	     * Environment#DIRECTORY_PODCASTS 音訊
	     * Environment#DIRECTORY_RINGTONES 鈴聲
	     * Environment#DIRECTORY_ALARMS 鬧鈴
	     * Environment#DIRECTORY_NOTIFICATIONS 通知鈴聲
 	     * Environment#DIRECTORY_PICTURES 圖片
	     * Environment#DIRECTORY_MOVIES 視訊
		 * 
		 * */
		filePathBuilder.append( "getExternalFilesDir == " ).append( getExternalFilesDir( Environment.DIRECTORY_PICTURES ) ).append( "\n" );

		// 儲存通過Context.openOrCreateDatabase 建立的資料庫檔案
		filePathBuilder.append( "getDatabasePath == " ).append( getDatabasePath( DATA_BASE_NAME ) ).append( "\n" );
		// 返回android 安裝包的完整路徑,這個包是一個zip的壓縮檔案,它包括應用程式的程式碼和assets檔案
		filePathBuilder.append( "getPackageCodePath == " ).append( getPackageCodePath( ) ).append( "\n" );
		// 返回android 安裝包的完整路徑,這個包是一個ZIP的要鎖檔案,它包括應用程式的私有資源。
		filePathBuilder.append( "getPackageResourcePath == " ).append( getPackageResourcePath( ) ).append( "\n" );
		// 返回應用程式的OBB檔案目錄(如果有的話),注意如果該應用程式沒有任何OBB檔案,這個目錄是不存在的。
		filePathBuilder.append( "getObbDir == " ).append( getObbDir( ) ).append( "\n" );

		return filePathBuilder;
	}

測試效果如下:

相關文章