2013-07-25 110 views
2

我試圖在手機的內部存儲器中存儲一個PNG文件,但嘗試了很多不同的方法後,我遇到了很多問題。只讀文件系統

I'm使用此代碼:

private void storeImage(Bitmap image, String nombre) { 
    try { 
     File file = new File(nombre+".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()); 
    } 
} 

但doesn't工作,因爲我得到這個消息logcat中:

訪問文件時出錯:打開失敗:EROFS(只讀文件系統)

我不知道如何更改文件的權限,或者如果有更好的方法來保存在手機中的PNG文件。

謝謝!

+0

<使用許可權的android:NAME = 「android.permission.WRITE_EXTERNAL_STORAGE」/><使用許可權的android:NAME =「android.permission.WRITE_INTERNAL_STORAGE 「/>你必須添加權限 –

回答

4

編輯:因爲奇巧使用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"到你的SD卡的根目錄,污染莫名其妙後者。該文件將保留在那裏,直到您手動刪除它,並且可以訪問手機上安裝的所有應用程序。在你的電腦上安裝SD卡或使用文件瀏覽器也可以訪問它。

這些行:

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); 
+0

Okey謝謝!但我並不是真的想將文件存儲在根目錄中,我不想將其存儲在externalSD中,我想將它存儲在內存中,存儲在我的應用程序存儲空間中的/ data /數據/包/文件/。這將是可能的? –

+0

是的,有可能,我編輯了我的答案 – Blackbelt

+0

Okey!我可以創建該文件!謝謝! –

相關問題