簡體   English   中英

只讀文件系統

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM