tutorial - save files android internal memory
¿Cómo crear un archivo en Android Internal Storage? (5)
Debería crear el directorio de media
adjunto a lo que getLocalPath()
.
Quiero guardar un archivo en el almacenamiento interno en una carpeta específica. Mi código es:
File mediaDir = new File("media");
if (!mediaDir.exists()){
mediaDir.createNewFile();
mediaDir.mkdir();
}
File f = new File(getLocalPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();
getLocalPath
devuelve /data/data/myPackage/files/media/qmhUZU.jpg
pero cuando quiero crear la carpeta de medios /data/data/myPackage/files/media/qmhUZU.jpg
la excepción "java.io.IOException: Read-only file system". ¿Alguna idea sobre cómo escribir mis archivos en el almacenamiento interno del teléfono en una carpeta multimedia? Gracias.
Deberías usar ContextWrapper así:
ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);
Como siempre, consulte la ContextWrapper , ContextWrapper tiene mucho que ofrecer.
Hola, intente esto, creará el directorio + archivo dentro de él
File mediaDir = new File("/sdcard/download/media");
if (!mediaDir.exists()){
mediaDir.mkdir();
}
File resolveMeSDCard = new File("/sdcard/download/media/hello_file.txt");
resolveMeSDCard.createNewFile();
FileOutputStream fos = new FileOutputStream(resolveMeSDCard);
fos.write(string.getBytes());
fos.close();
System.out.println("Your file has been written");
Obtuve el mismo error exacto también. Aquí está la solución. Cuando especifique dónde escribir, Android resolverá automáticamente su ruta en /data/
o /mnt/sdcard/
. Dejame explicar.
Si ejecuta la siguiente declaración:
File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();
Resolverá la ruta a la raíz /data/
algún lugar más arriba en Android.
Me di cuenta de esto, porque después de ejecutar el siguiente código, se colocó automáticamente en la raíz /mnt/
sin que yo haya traducido nada por mi cuenta.
File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();
Una solución rápida sería cambiar su siguiente código:
File f = new File(getLocalPath().replace("/data/data/", "/"));
Espero que esto ayude
Escribir un archivo
Al guardar un archivo en el almacenamiento interno, puede adquirir el directorio apropiado como un Archivo llamando a uno de estos dos métodos:
getFilesDir ()
Returns a File representing an internal directory for your app.
getCacheDir ()
Returns a File representing an internal directory for your
app''s temporary cache files.
Be sure to delete each file once it is no longer needed and implement a reasonable
size limit for the amount of memory you use at any given time, such as 1MB.
Precaución: si el sistema tiene poca capacidad de almacenamiento, puede eliminar los archivos de caché sin previo aviso.