錯誤代碼
File file = new File(context.getExternalFilesDir(null), "state.txt");
FileOutputStream os = context.openFileOutput(data, MODE_PRIVATE); // 錯誤:openFileOutput 寫內部存儲,非外部
正確寫法
File file = new File(context.getExternalFilesDir(null), "state.txt");
try (FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos)) {
osw.write(data);
} catch (IOException e) {
e.printStackTrace();
}
關鍵點
getExternalFilesDir(null) 返回應用專屬外部存儲目錄(/sdcard/Android/data/pkg/files/),無需權限,應用卸載自動刪除。
- 若需公共目錄(如 Pictures),用
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),需 WRITE_EXTERNAL_STORAGE 權限。
- API 29+ 分區存儲限制訪問其他應用文件,優先使用專屬目錄。