leer - crear y escribir archivo txt android studio
Intentando crear un archivo en Android: abrir fallido: EROFS(sistema de archivos de solo lectura) (6)
He intentado esto con y sin el permiso WRITE_INTERNAL_STORAGE.
No hay permiso WRITE_INTERNAL_STORAGE
en Android.
¿Cómo creo este archivo para escribir?
No lo hace, excepto quizás en un dispositivo rooteado, 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 tiene acceso.
Utilice la versión del constructor FileOutputStream
que toma un objeto File
. Cree ese objeto de File
partir de alguna ubicación en la que pueda escribir, como por ejemplo:
-
getFilesDir()
(llamado en tuActivity
u otroContext
) -
getExternalFilesDir()
(llamado en tuActivity
u otroContext
)
Este último requerirá WRITE_EXTERNAL_STORAGE
como un permiso.
¿Hay alguna manera más fácil que escribirlo en un archivo y luego volver a leerlo?
Puede colocarlo 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. El 99% de los usuarios de dispositivos con Android tendrá almacenamiento externo; la excepción serán los dispositivos con más de 4 años en los que el usuario haya eliminado su tarjeta SD. Los dispositivos fabricados desde mediados de 2010 tienen almacenamiento externo como parte de flash incorporado, no como medio extraíble.
Esta línea:
final FileOutputStream outputStream = new FileOutputStream(name);
da como resultado una FileNotFoundException
con el mensaje /2ozjfFQzwv: open failed: EROFS (Read-only file system)
donde "2ozjfFQzwv" es lo que pasé como el nombre del archivo.
He intentado esto con y sin el permiso WRITE_INTERNAL_STORAGE
. ¿Cómo creo este archivo para escribir?
Alternativamente, solo quiero poder dar una imagen a una nueva actividad, y es demasiado grande para serializarlo en un extra. ¿Hay alguna manera más fácil que escribirlo en un archivo y luego volver a leerlo? Todas las preguntas aquí parecen ser sobre escribir en una tarjeta SD, lo que no quiero hacer porque muchas personas no tienen ranuras para tarjetas SD.
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í hay una muestra simple del desarrollador de Android .
Básicamente, puede escribir un archivo en el almacenamiento interno de esta 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, el almacenamiento interno, sino su propio almacenamiento privado (que se encuentra en / data / data / PACKAGE_NAME).
Debes usar la API para obtener la ruta correcta que está permitida para tu aplicación.
lee this
Google tiene acceso de escritura restringido a la tarjeta SD externa. Desde API 19 hay un marco llamado Storage Access Framework que le permite configurar los "contratos" para permitir el acceso de escritura.
Para más información:
intente utilizar el permiso de WRITE_EXTERNAL_STORAGE. Debe 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