Intentando crear un archivo en Android: open failed: EROFS (Sistema de archivos de sólo lectura)

Esta línea:

final FileOutputStream outputStream = new FileOutputStream(name); 

FileNotFoundException en una FileNotFoundException con el mensaje siendo /2ozjfFQzwv: open failed: EROFS (Read-only file system) donde "2ozjfFQzwv" es lo que pasé como nombre del archivo.

He intentado esto con y sin el permiso WRITE_INTERNAL_STORAGE . ¿Cómo puedo crear este archivo para escribir?

Alternativamente, sólo quiero ser capaz de dar una imagen a una nueva actividad, y es demasiado grande para serializar en un extra. ¿Hay una manera más fácil que escribirlo en un archivo y leerlo de nuevo? Todas las preguntas aquí parecen estar sobre escribir a una tarjeta del SD, que no quiero hacer porque mucha gente no tiene ranuras para tarjeta del SD.

He intentado esto con y sin el permiso WRITE_INTERNAL_STORAGE.

No hay permiso WRITE_INTERNAL_STORAGE en Android.

¿Cómo puedo crear este archivo para escribir?

Usted no, excepto quizás en un dispositivo con raíz, si su aplicación se está ejecutando con privilegios de superusuario. Está intentando escribir en la raíz del almacenamiento interno, a qué aplicaciones no tienen acceso.

Utilice la versión del constructor FileOutputStream que toma un objeto File . Cree ese objeto File basado en una ubicación a la que pueda escribir, como por ejemplo:

  • getFilesDir() (llamado en su Activity u otro Context )
  • getExternalFilesDir() (llamado en su Activity u otro Context )

Este último requerirá WRITE_EXTERNAL_STORAGE como permiso.

¿Hay una manera más fácil que escribirlo en un archivo y leerlo de nuevo?

Puede ponerlo temporalmente en un miembro de datos estáticos.

Porque muchas personas no tienen ranuras para tarjetas SD

Las "ranuras para tarjetas SD" son irrelevantes, en general. 99% de los usuarios de dispositivos Android tendrán almacenamiento externo – la excepción será 4 + años de edad los dispositivos donde el usuario retiró su tarjeta SD. Los dispositivos fabricados desde mediados de 2010 tienen almacenamiento externo como parte del flash integrado, no como medios extraíbles.

Intenta usar el permiso de WRITE_EXTERNAL_STORAGE Deberías usar eso si hay una tarjeta externa o no.

Esto funciona bien para mi:

 path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_MOVIES); File file = new File(path, "/" + fname); 

Y coloca mis archivos en la carpeta apropiada

Añadiendo

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

En manifiesto y usando lo mismo que Martin:

 path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); File file = new File(path, "/" + fname); 

Funcionó.

Aquí está la muestra simple de desarrollador android .

Básicamente, puede escribir un archivo en el almacenamiento interno de la siguiente manera:

 String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); 

Como otros han mencionado, la aplicación en Android no puede escribir un archivo en cualquier carpeta de almacenamiento interno, sino su propio almacenamiento privado (que está en / data / data / PACKAGE_NAME).

Debe utilizar la API para obtener la ruta correcta que se permite para su aplicación.

Lee esto

Google ha restringido el acceso de escritura a la tarjeta SD externa. Desde API 19 existe un framework denominado Storage Access Framework que le permite configurar "contratos" para permitir el acceso de escritura.

Para más información:

Android – Cómo utilizar el nuevo Storage Access Framework para copiar archivos a una tarjeta sd externa

  • Ahorro de grandes arreglos cortos android
  • Manera elegante de leer el archivo en el arsenal del byte en Java
  • Java.io.IOException: write failed: EPIPE (Broken pipe)
  • Android - archivo de diccionario. ¿Cuál es más rápido, la base de datos o el archivo de lectura directamente?
  • Mover archivos en la tarjeta sd
  • Escribir archivos en / system
  • Problema al conectar la aplicación de Android al socket mediante la conexión de celda
  • Tiempo de descarga de Speed ​​Up
  • Fusionar dos archivos WAVE en Android (concatenar)
  • No se puede tomar la captura de pantalla en android utilizando robotium y método privado
  • ¿Cómo puedo mostrar una barra de progreso al copiar archivos utilizando Apache FileUtils? Androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.