Código Java para Gestión de Archivos: Creación, Lectura, Búsqueda, Eliminación y Modificación

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 15,03 KB

Este código Java demuestra cómo realizar operaciones básicas de gestión de archivos, incluyendo:

  • Creación de archivos.
  • Lectura de archivos.
  • Búsqueda de registros dentro de archivos.
  • Eliminación de registros.
  • Modificación de registros.

El código utiliza las clases DataOutputStream, DataInputStream, FileInputStream, y FileOutputStream para interactuar con archivos binarios.

Autores

  • Aldama Alarcón Sergio
  • Bedolla Velázquez Luis Alberto
  • Barrera González Daniel Esteban
  • Martínez Mejía Christian Ignacio

Código Fuente


package ejercicio18;

import java.util.Scanner;
import java.io.*;

public class Main {

    public static void imprimir() {
        System.out.println("AUTORES:");
        System.out.println("\t\tAldama Alarcón Sergio");
        System.out.println("\t\tBedolla Velazquez Luis Alberto");
        System.out.println("\t\tBarrera Gonsalez Daniel Esteban");
        System.out.println("\t\tMartinez Mejia Christian Ignacio");
    }

    public static void main(String[] args) throws Exception {
        Scanner leer = new Scanner(System.in);
        File origen = new File("C:/datos.txt");
        File destino = new File("C:/datosnuevos.txt");
        DataOutputStream escritura = null;
        DataInputStream lectura = null;
        String nombre = "";
        String paterno = "";
        String materno = "";
        String nombre2 = "";
        String nombre_eliminar = "";
        String nombre_modificar = "";
        boolean continuar = false;
        int opc, edad = 0;
        float salario;

        do {
            do {
                System.out.println("MENU DE ARCHIVOS");
                System.out.println("1.-ESCRIBIR ARCHIVO");
                System.out.println("2.-LEER ARCHIVOS");
                System.out.println("3.-BUSCAR ARCHIVOS");
                System.out.println("4.-ELIMINAR ARCHIVOS");
                System.out.println("5.-MODIFICAR ARCHIVOS");
                System.out.println("6.-SALIR");
                opc = leer.nextInt();
                if (opc < 1 || opc > 6)
                    System.out.println("ERROR, LA OPCION DEBE DE ESTAR ENTRE 1 y 6");
            } while (opc < 1 || opc > 6);

            switch (opc) {
                case 1:
                    System.out.println("ESCRIBE TU NOMBRE");
                    nombre = leer.next();
                    System.out.println("ESCRIBE TU APELLIDO PATERNO");
                    paterno = leer.next();
                    System.out.println("ESCRIBE TU APELLIDO MATERNO");
                    materno = leer.next();
                    System.out.println("ESCRIBE TU EDAD");
                    edad = leer.nextInt();
                    System.out.println("ESCRIBE TU SUELDO");
                    salario = leer.nextFloat();
                    try {
                        escritura = new DataOutputStream(new FileOutputStream(origen, true));
                        escritura.writeUTF(nombre);
                        escritura.writeUTF(paterno);
                        escritura.writeUTF(materno);
                        escritura.writeInt(edad);
                        escritura.writeFloat(salario);
                        escritura.close();

                    } catch (IOException ioe) {
                        System.out.println("NO SE PUDO ESCRIBIR EL ARCHIVO");
                    }
                    break;

                case 2:
                    try {
                        lectura = new DataInputStream(new FileInputStream(origen));
                        while (true) {
                            nombre = lectura.readUTF();
                            paterno = lectura.readUTF();
                            materno = lectura.readUTF();
                            edad = lectura.readInt();
                            salario = lectura.readFloat();

                            System.out.println("Nombre:" + nombre);
                            System.out.println("Apellido Paterno: " + paterno);
                            System.out.println("Apellido Materno: " + materno);
                            System.out.println("Edad: " + edad);
                            System.out.println("Sueldo: " + salario);

                        }

                    } catch (FileNotFoundException fnfe) {
                        System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");
                    } catch (EOFException eofe) {
                        System.out.println("NO HAY MAS REGISTROS");
                        lectura.close();
                    }

                    break;
                case 3:
                    System.out.println("DIGITE EL NOMBRE A BUSCAR: ");
                    nombre2 = leer.next();

                    try {
                        lectura = new DataInputStream(new FileInputStream(origen));
                        while (true) {
                            nombre = lectura.readUTF();
                            paterno = lectura.readUTF();
                            materno = lectura.readUTF();
                            edad = lectura.readInt();
                            salario = lectura.readFloat();
                            if (nombre.equals(nombre2)) {
                                System.out.println("Nombre: " + nombre + "   A.Paterno:" + paterno + "  A.Materno: " + materno + "  Edad: " + edad
                                        + "   Salario: " + salario);
                                break;
                            }

                        }

                    } catch (FileNotFoundException fnfe) {
                        System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");

                    } catch (EOFException eofe) {
                        System.out.println("NO EXISTE EL REGISTRO");
                        lectura.close();
                    }
                    break;
                case 4:
                    System.out.println("DIGITE EL NOMBRE A ELIMINAR: ");
                    nombre_eliminar = leer.next();

                    try {
                        lectura = new DataInputStream(new FileInputStream(origen));
                        while (true) {
                            nombre = lectura.readUTF();
                            paterno = lectura.readUTF();
                            materno = lectura.readUTF();
                            edad = lectura.readInt();
                            salario = lectura.readFloat();
                            if (nombre.equals(nombre_eliminar)) {
                                continuar = true;
                                break;
                            }

                        }

                    } catch (FileNotFoundException fnfe) {
                        System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");

                    } catch (EOFException eofe) {
                        System.out.println("SE ELIMINO EL REGISTRO CORRECTAMENTE");
                    }
                    lectura.close();
                    if (continuar == true)
                        try {
                            lectura = new DataInputStream(new FileInputStream(origen));
                            escritura = new DataOutputStream(new FileOutputStream(destino, true));
                            while (true) {
                                nombre = lectura.readUTF();
                                paterno = lectura.readUTF();
                                materno = lectura.readUTF();
                                edad = lectura.readInt();
                                salario = lectura.readFloat();
                                if (!nombre.equals(nombre_eliminar)) {
                                    escritura.writeUTF(nombre);
                                    escritura.writeUTF(paterno);
                                    escritura.writeUTF(materno);
                                    escritura.writeInt(edad);
                                    escritura.writeFloat(salario);

                                }
                            }
                        } catch (FileNotFoundException fnfe) {
                            System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");
                        } catch (EOFException eofe) {
                            System.out.println("SE ELIMINO EL REGISTRO");
                            lectura.close();
                            escritura.close();
                            origen.delete();
                            origen = new File("C:/datos.txt");
                            destino.renameTo(origen);
                        }
                    break;
                case 5:

                    System.out.println("DIGITE EL NOMBRE A MODIFICAR: ");
                    nombre_modificar = leer.next();

                    try {
                        lectura = new DataInputStream(new FileInputStream(origen));
                        while (true) {
                            nombre = lectura.readUTF();
                            paterno = lectura.readUTF();
                            materno = lectura.readUTF();
                            edad = lectura.readInt();
                            salario = lectura.readFloat();

                            continuar = true;

                            break;
                        }



                    } catch (FileNotFoundException fnfe) {
                        System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");

                    } catch (EOFException eofe) {
                        System.out.println("SE ELIMINO EL REGISTRO CORRECTAMENTE");
                    }
                    lectura.close();
                    if (continuar == true)
                        try {
                            lectura = new DataInputStream(new FileInputStream(origen));
                            escritura = new DataOutputStream(new FileOutputStream(destino, true));
                            while (true) {
                                nombre = lectura.readUTF();
                                paterno = lectura.readUTF();
                                materno = lectura.readUTF();
                                edad = lectura.readInt();
                                salario = lectura.readFloat();
                                if (!nombre.equals(nombre_modificar)) {
                                    escritura.writeUTF(nombre);
                                    escritura.writeUTF(paterno);
                                    escritura.writeUTF(materno);
                                    escritura.writeInt(edad);
                                    escritura.writeFloat(salario);

                                }
                                else {
                                    System.out.println("ESCRIBE TU NOMBRE");
                                    nombre = leer.next();
                                    System.out.println("ESCRIBE TU APELLIDO PATERNO");
                                    paterno = leer.next();
                                    System.out.println("ESCRIBE TU APELLIDO MATERNO");
                                    materno = leer.next();
                                    System.out.println("ESCRIBE TU EDAD");
                                    edad = leer.nextInt();
                                    System.out.println("ESCRIBE TU SUELDO");
                                    salario = leer.nextFloat();
                                    escritura.writeUTF(nombre);
                                    escritura.writeUTF(paterno);
                                    escritura.writeUTF(materno);
                                    escritura.writeInt(edad);
                                    escritura.writeFloat(salario);
                                    escritura.close();

                                }

                            }
                        } catch (FileNotFoundException fnfe) {
                            System.out.println("ERROR AL INTENTAR LEER EL ARCHIVO");
                        } catch (EOFException eofe) {
                            System.out.println("SE MODIFICO EL REGISTRO CORRECTAMENTE");
                            lectura.close();
                            escritura.close();
                            origen.delete();
                            origen = new File("C:/datos.txt");
                            destino.renameTo(origen);
                        }
                    break;
                default:
                    System.out.println("PROGRAMA FINALIZADO!!!...");
                    imprimir();
            }
        } while (opc != 6);
    }
}

Explicación del Código

El código presenta un menú con opciones para interactuar con un archivo. Las opciones son:

  1. Escribir Archivo: Solicita al usuario su nombre, apellidos, edad y sueldo, y los guarda en un archivo binario ("C:/datos.txt"). Utiliza DataOutputStream para escribir los datos.
  2. Leer Archivo: Lee todos los registros del archivo binario y los muestra en la consola. Utiliza DataInputStream. El bucle while(true) se rompe con una excepción EOFException cuando se llega al final del archivo.
  3. Buscar Archivo: Solicita al usuario el nombre a buscar. Lee el archivo y, si encuentra un registro con ese nombre, muestra todos los datos del registro.
  4. Eliminar Archivo: Solicita el nombre a eliminar. Lee el archivo original, copia todos los registros *excepto* el que se va a eliminar a un archivo temporal ("C:/datosnuevos.txt"), borra el archivo original y renombra el archivo temporal.
  5. Modificar Archivo: Similar a eliminar, pero permite al usuario introducir nuevos valores para el registro que coincide con el nombre a modificar. Los datos modificados se escriben en el archivo temporal, y luego se realizan las operaciones de borrado y renombrado.
  6. Salir: Finaliza el programa.

El manejo de excepciones se realiza con bloques try-catch para capturar FileNotFoundException (si el archivo no existe) y EOFException (para detectar el final del archivo). Es importante cerrar los flujos (DataInputStream y DataOutputStream) después de usarlos.

Consideraciones Adicionales

  • Las rutas de los archivos ("C:/datos.txt" y "C:/datosnuevos.txt") están hardcodeadas. Sería mejor solicitar estas rutas al usuario o usar rutas relativas.
  • El código asume que el archivo "datos.txt" tiene un formato específico (String, String, String, int, float). Si el archivo no sigue este formato, se producirán errores.
  • Se podría añadir validación de datos para asegurar que la entrada del usuario es correcta (por ejemplo, que la edad sea un número positivo).
  • Se podría implementar una clase "Persona" o similar para representar los datos de cada registro, en lugar de usar variables separadas.

Entradas relacionadas: