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:
- 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. - Leer Archivo: Lee todos los registros del archivo binario y los muestra en la consola. Utiliza
DataInputStream
. El buclewhile(true)
se rompe con una excepciónEOFException
cuando se llega al final del archivo. - 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.
- 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.
- 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.
- 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.