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.
- Java.io.IOException: No queda espacio en el dispositivo Android
- Eliminar archivo de base de datos de la carpeta de activos
- File.exists () devuelve false cuando el archivo existe
- Android - OutOfMemory al leer el archivo de texto
- Cómo leer una imagen de drawble a objeto de archivo en java?
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.
- El archivo existe y el directorio IS, pero listFiles () devuelve null
- Cargar archivos de MS Word de Android a .Net WCF?
- Android: error de apertura del archivo recién creado
- Clojure Android no logra leer el archivo
- Android MediaRecorder y setOutputFile
- ¿Cómo puedo serializar un objeto y guardarlo en un archivo de Android?
- Android openFileOutput - no hay permiso para crear almacenamiento
- Lectura rápida de enteros pequeños endian de archivo
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 suActivity
u otroContext
) -
getExternalFilesDir()
(llamado en suActivity
u otroContext
)
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