2013-07-25 2 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()); 
    } 
} 

Но это не распространяется работу, потому что я получаю это сообщение: LogCat

Ошибка доступа файла: открыть не удалось: EROFS (только для чтения файла система)

Я не знаю, как изменить разрешения файла или если есть лучшие способы сохранить файл png в телефоне.

Спасибо!

+0

<использует-разрешение андроида: имя = "android.permission.WRITE_EXTERNAL_STORAGE" /><использует-разрешение андроида: Name = "android.permission.WRITE_INTERNAL_STORAGE "/> Вам нужно добавить разрешения –

ответ

4

Edit: так как 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, загрязняя как-то последний. Файл останется там до тех пор, пока вы не удалите его вручную, и он будет доступен для всех приложений, установленных на вашем телефоне. Установка 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 thanks !! Но я действительно не хочу хранить файл в корне, и я не хочу хранить его во внешнемSD, я бы хотел сохранить его во внутренней памяти, в моем пространстве хранения приложения, в/data/данные/пакет/файл /. Это было бы возможно? –

+0

да это возможно, я отредактировал мой ответ – Blackbelt

+0

Okey !! Я могу создать файл! Благодаря! –

Смежные вопросы