El método openFileOutput en Android se utiliza para escribir datos en un archivo
dentro del almacenamiento interno de la aplicación. Los archivos creados con este
método son privados para la aplicación y no pueden ser accedidos por otras aplicaciones
a menos que se especifiquen permisos explícitos.
1. Conceptos básicos
Sintaxis
java
Copiar código
FileOutputStream openFileOutput(String name, int mode) throws
FileNotFoundException
• Parámetros:
o name: Nombre del archivo (cadena de texto). Si el archivo no existe, se creará.
o mode: Modo de acceso. Los valores más comunes son:
▪ MODE_PRIVATE (valor predeterminado): Sobrescribe el archivo si ya
existe.
▪ MODE_APPEND: Agrega datos al final del archivo sin sobrescribirlo.
▪ MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE (obsoletos a
partir de Android 7.0).
• Retorno: Devuelve un FileOutputStream, que permite escribir datos en el
archivo.
• Excepción: Puede lanzar FileNotFoundException si ocurre algún problema al
intentar abrir el archivo.
2. Ejemplo básico: Escribir en un archivo
Código
java
Copiar código
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
String fileName = "[Link]";
String contenido = "Hola, este es un archivo de ejemplo.";
try (FileOutputStream fos = openFileOutput(fileName,
MODE_PRIVATE)) {
[Link]([Link]()); // Escribir el contenido
en el archivo
[Link]("Archivo escrito exitosamente.");
} catch (IOException e) {
[Link]();
}
}
}
Explicación:
1. Nombre del archivo: Se especifica el nombre del archivo como "[Link]".
2. Modo de apertura: Se utiliza MODE_PRIVATE para que sea accesible solo para esta
aplicación.
3. Escritura de datos: Los datos se convierten en bytes usando getBytes().
3. Leer el archivo creado
Después de escribir datos con openFileOutput, se pueden leer usando
openFileInput.
Código
java
Copiar código
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
String fileName = "[Link]";
try (FileInputStream fis = openFileInput(fileName)) {
int contenido;
StringBuilder sb = new StringBuilder();
while ((contenido = [Link]()) != -1) {
[Link]((char) contenido);
}
[Link]("Contenido del archivo: " +
[Link]());
} catch (IOException e) {
[Link]();
}
}
}
Resultado: El contenido escrito en el archivo ("Hola, este es un archivo de
ejemplo.") será leído y mostrado.
4. Agregar datos al archivo existente
Para agregar datos sin sobrescribir el contenido existente, utiliza MODE_APPEND.
Código
java
Copiar código
try (FileOutputStream fos = openFileOutput("[Link]",
MODE_APPEND)) {
String nuevoContenido = "\nEsta es una nueva línea.";
[Link]([Link]());
[Link]("Datos agregados al archivo.");
} catch (IOException e) {
[Link]();
}
Resultado: El archivo ahora contendrá:
Copiar código
Hola, este es un archivo de ejemplo.
Esta es una nueva línea.
5. Escritura avanzada: Manejo de objetos
Puedes escribir objetos serializables en el archivo utilizando ObjectOutputStream.
Código
java
Copiar código
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
Usuario usuario = new Usuario("Juan", 30);
try (FileOutputStream fos = openFileOutput("[Link]",
MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
[Link](usuario); // Serializar y guardar el
objeto
[Link]("Objeto escrito en el archivo.");
} catch (IOException e) {
[Link]();
}
}
static class Usuario implements Serializable {
String nombre;
int edad;
Usuario(String nombre, int edad) {
[Link] = nombre;
[Link] = edad;
}
}
}
Explicación:
• Usuario es una clase serializable.
• Los objetos de esta clase se escriben en el archivo [Link].
6. Escritura y lectura de grandes volúmenes de datos
Para trabajar con grandes volúmenes de datos, puedes dividir los datos en bloques y
escribirlos gradualmente.
Código
java
Copiar código
try (FileOutputStream fos = openFileOutput("datos_grandes.txt",
MODE_PRIVATE)) {
for (int i = 0; i < 1000000; i++) {
[Link](("Línea " + i + "\n").getBytes());
}
[Link]("Archivo grande creado exitosamente.");
} catch (IOException e) {
[Link]();
}
Resultado: Se crea un archivo con un millón de líneas.
7. Lista de archivos creados por la aplicación
Puedes listar los archivos creados usando fileList().
Código
java
Copiar código
String[] archivos = fileList();
[Link]("Archivos creados:");
for (String archivo : archivos) {
[Link](archivo);
}
Resultado: Muestra todos los archivos creados en el almacenamiento interno de la
aplicación.
8. Eliminar archivos creados
Puedes eliminar archivos con deleteFile.
Código
java
Copiar código
if (deleteFile("[Link]")) {
[Link]("Archivo eliminado exitosamente.");
} else {
[Link]("El archivo no existe o no pudo ser
eliminado.");
}
Errores comunes y cómo evitarlos
1. Nombre de archivo inválido:
o Evita caracteres no permitidos en los nombres de archivo como /, \, *, ?, etc.
2. No manejar excepciones:
o Siempre usa bloques try-catch para manejar posibles errores como
IOException.
3. Recursos no cerrados:
o Utiliza try-with-resources para cerrar automáticamente los recursos
abiertos.
4. Datos sobrescritos accidentalmente:
o Si no quieres sobrescribir datos, utiliza MODE_APPEND.
Con estos ejemplos, puedes utilizar openFileOutput desde operaciones básicas hasta
casos avanzados como escritura de objetos y manejo de grandes volúmenes de datos.