[英]Read-only file system
我正在嘗試將png文件存儲在手機的內部存儲器中,但是遇到了一些困難。
我正在使用此代碼:
private void storeImage(Bitmap image, String nombre) {
try {
File file = new File(name + ".png");
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
但是此LogCat消息失敗:
訪問文件時出錯:打開失敗:EROFS(只讀文件系統)
我不知道如何更改文件的權限,或者是否有更好的方法將png文件存儲在手機中。
謝謝!
編輯:自kitkat使用Environment.getExternalStorageDirectory();
不建議使用Context.getExternalFilesDir ,該方法返回應用程序可以放置其擁有的永久文件的主共享/外部存儲設備上目錄的絕對路徑。 這些文件是應用程序的內部文件,通常作為介質對用戶不可見。 此目錄及其內容將在卸載應用程序后刪除,並且您將沒有WRITE_EXTERNAL_STORAGE
使用權限才能使用返回的目錄。
您擁有的代碼正試圖寫在/
,這是只讀的。 如果要將位圖存儲在SD卡中,則必須進行以下更改:
File file = new File(nombre+".png");
變成:
File root = Environment.getExternalStorageDirectory();
File file = new File(root, nombre+".png");
這兩行將嘗試將nombre+".png"
寫入sdcard的根目錄,從而以某種方式污染后者。 該文件將保留在那里,直到您手動刪除它為止,並且手機上安裝的所有應用程序都可以訪問該文件。 在PC上安裝sdcard或使用文件瀏覽器也可以訪問它。
這些行:
final FileOutputStream fos = openFileOutput(nombre+".png", Context.MODE_PRIVATE);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
將文件寫入內部存儲( /data/data/you.app.name
)中的應用私有空間。 由於它是私有的,只有您的應用程序才能訪問它。 唯一的例外是如果您的手機已扎根。
要檢索它,您必須使用:
final FileInputStream fis = openFileOutput(nombre+".png", Context.MODE_PRIVATE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.