語言

ContextWrapper.GetExternalFilesDir(String) 方法

定義

回傳主外部檔案系統目錄的絕對路徑(該 ExternalStorageDirectory位址位於 ),該應用程式可放置其擁有的持久檔案。

[Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")]
public override Java.IO.File? GetExternalFilesDir(string? type);
[<Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")>]
override this.GetExternalFilesDir : string -> Java.IO.File

參數

type
String

要回傳的檔案目錄類型。 檔案目錄根節點可為空,或子目錄為以下環境常數之一:DirectoryMusic、DirectoryPodcasts、DirectoryRingtonesDirectoryAlarmsDirectoryNotificationsDirectoryPictures或。DirectoryMovies

傳回

回傳主共享/外部儲存裝置目錄的絕對路徑,該應用程式可放置其擁有的持久檔案。 這些檔案是應用程式內部的,通常不會以媒體形式對使用者可見。 這類似 getFilesDir(),這些檔案在應用程式卸載時會被刪除,但兩者有一些重要差異:共享儲存空間不一定總是可用,因為使用者可以彈出可移除的媒體。 媒體狀態可透過 Environment.getExternalStorageState(File) 檢查。 這些檔案並未執行任何安全措施。 例如,任何持有Manifest.permission.WRITE_EXTERNAL_STORAGE的應用程式都能寫入這些檔案。 若共用儲存裝置被模擬(依 Environment.isExternalStorageEmulated(File) 判定),其內容會由私人使用者資料分割區支援,這意味著在此儲存資料與 getFilesDir() 等所回傳的私有目錄相比,幾乎沒有太大好處。從Build.VERSION_CODES年開始。KITKAT 中,讀取或寫入回傳路徑無需權限;通話應用程式隨時都能存取。 這只適用於呼叫應用程式套件名稱所產生的路徑。 若要存取屬於其他套件的路徑,需要Manifest.permission.WRITE_EXTERNAL_STORAGE和/或 Manifest.permission.READ_EXTERNAL_STORAGE。 在擁有多使用者的裝置(如 UserManager 所述)上,每個使用者都有自己的獨立共享儲存空間。 應用程式只能存取其所執行使用者的共享儲存空間。 若插入不同的共享儲存媒介,回傳路徑可能會隨時間改變,因此應僅保留相對路徑。 以下是一個典型的程式碼範例,用於操作應用程式共用儲存中的檔案:void createExternalStoragePrivateFile() { // 建立一條路徑,讓我們將私人檔案放置於外部 // 儲存空間。 File file = new File(getExternalFilesDir(null), “DemoFile.jpg”);試試看 { // 非常簡單的程式碼,將應用程式的 // 資源中的圖片複製到外部檔案。 請注意,這段程式碼不會做錯誤檢查,且假設圖片很小(不會嘗試分段複製)。 請注意,如果外部儲存裝置目前未掛載,這個裝置會悄悄失敗。 InputStream is = getResources().openRawResource(R.drawable.balloons);OutputStream os = new FileOutputStream(file);byte[] data = new byte[is.available()];is.read(data);os.write(data);is.close();os.close();} catch (IOException e) { // 無法建立檔案,可能是因為外部儲存裝置 // 目前未掛載。 Log.w(“ExternalStorage”, “Error writing ” + file, e); } }void deleteExternalStoragePrivateFile() { // 取得外部儲存檔案的路徑。 如果外部儲存裝置目前沒有掛載,這個系統就會失敗。 File file = new File(getExternalFilesDir(null), “DemoFile.jpg”);file.delete();} 布林值 hasExternalStoragePrivateFile() { // 取得外部儲存檔案的路徑。 如果外部儲存裝置目前沒有掛載,這個系統就會失敗。 File file = new File(getExternalFilesDir(null), “DemoFile.jpg”);return file.exists();} 如果你為此函式提供非空型別,回傳的檔案將是該型別子目錄的路徑。 雖然這些檔案不會被媒體掃描器自動掃描,但你可以用 MediaScannerConnection.scanFile 明確將它們加入媒體資料庫。 請注意,這與 Environment.getExternalStoragePublicDirectory() 不同,後者提供所有應用程式共享的媒體目錄。 此處返回的目錄屬於應用程式所有,當應用程式被移除時,其內容將被移除。 與 Environment.getExternalStoragePublicDirectory() 不同,這裡回傳的目錄會自動為您建立。 這裡有一個典型程式碼範例,用於操作應用程式共享儲存中的圖片並將其加入媒體資料庫:void createExternalStoragePrivatePicture() { // 建立一條路徑,讓我們將圖片放入自己的私人 // 圖片目錄。 請注意,我們其實不需要在DIRECTORY_PICTURES放置 // 圖片,因為媒體掃描器會看到這些目錄中的所有媒體;這對於其他媒體類型如 DIRECTORY_MUSIC 可能很有用,因為它能幫助它分類 // 媒體以便顯示給使用者。 檔案路徑 = getExternalFilesDir(Environment.DIRECTORY_PICTURES);File file = 新檔案(path, “DemoPicture.jpg”);試試看 { // 非常簡單的程式碼,將應用程式的 // 資源中的圖片複製到外部檔案。 請注意,這段程式碼不會做錯誤檢查,且假設圖片很小(不會嘗試分段複製)。 請注意,如果外部儲存裝置目前未掛載,這個裝置會悄悄失敗。 InputStream is = getResources().openRawResource(R.drawable.balloons);OutputStream os = new FileOutputStream(file);byte[] data = new byte[is.available()];is.read(data);os.write(data);is.close();os.close();告訴媒體掃描器有新檔案,讓使用者能立即取得 // 檔案。 MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri) { Log.i(“ExternalStorage”, “Scanned ” + path + “:”);Log.i(“ExternalStorage”, “-> uri=” + uri); } });} catch (IOException e) { // 無法建立檔案,可能是因為外部儲存裝置 // 目前未掛載。 Log.w(“ExternalStorage”, “Error writing ” + file, e); } }void deleteExternalStoragePrivatePicture() { // 建立一條路徑,讓我們將照片放入使用者的 // 公開圖片目錄並刪除該檔案。 如果外部儲存裝置目前沒有掛載,這個系統就會失敗。 檔案路徑 = getExternalFilesDir(Environment.DIRECTORY_PICTURES);如果(path != null) { File file = new File(path, “DemoPicture.jpg”);file.delete();} } 布林值 hasExternalStoragePrivatePicture() { // 建立一條路徑,讓我們將照片放入使用者的 // 公開圖片目錄,並檢查該檔案是否存在。 如果 // 外部儲存裝置目前沒有掛載,它會認為 // 圖片不存在。 檔案路徑 = getExternalFilesDir(Environment.DIRECTORY_PICTURES);如果(path != null) { File file = new File(path, “DemoPicture.jpg”);return file.exists();} 回傳 false;} 參數類型 字串 :此值可能為空值。 返回檔案 此值可能是空值。

屬性

備註

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

Java 文件 android.content.ContextWrapper.getExternalFilesDir(java.lang.String)。

適用於