¿Cómo crear un archivo en Android Internal Storage?

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 documentación , ContextWrapper tiene mucho que ofrecer.

Debería crear el directorio de media adjunto a lo que getLocalPath() .

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 statement:

 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.

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");