首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 檔案儲存路徑差異:getExternalFilesDir vs getFilesDir 選擇指南

     編輯:程式設計綜合問答

現象

期望照片儲存在 /data/data/com.androidproject/files/Camera/photo.png(內部儲存),但實際 Log 顯示 file:///storage/emulated/0/Android/data/com.androidproject/files/Camera/photo.png(外部儲存)。

原因分析

程式碼使用 getExternalFilesDir("Camera"),這會回傳 **外部儲存** 的應用專屬目錄(通常位於 SD 卡或模擬的共享儲存),而非內部儲存。

解決方法

若需內部私有儲存(應用卸載即刪除)

File dir = new File(getFilesDir(), "Camera");
if (!dir.exists()) dir.mkdirs();
File photo = new File(dir, "photo.png");
// 使用 photo.getAbsolutePath() 或 Uri.fromFile(photo)

若需外部儲存(用戶可透過檔案管理器存取)

File dir = getExternalFilesDir("Camera"); // 無需權限,API 19+
if (dir != null) {
    File photo = new File(dir, "photo.png");
    // ...
}

關鍵差異表

方法儲存位置權限需求應用卸載後用戶可見性
getFilesDir()內部儲存 /data/data/pkg/files無刪除不可見(需 Root)
getExternalFilesDir()外部儲存 /sdcard/Android/data/pkg/filesAPI 19+ 無需權限刪除可見(檔案管理器)
Environment.getExternalStoragePublicDirectory()公共目錄(如 DCIM、Pictures)需 READ/WRITE_EXTERNAL_STORAGE保留完全可見

建議

  • 應用私有資料(快取、設定、敏感圖片)優先用 getFilesDir()。
  • 需分享給其他應用或用戶管理的媒體檔案,用 getExternalFilesDir() 或 MediaStore。
  • API 29+ (Android 10) 採用分區儲存,建議改用 MediaStore 或 ContentResolver。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved