Para dar de baja, no podemos borrar directamente en el archivo. Hay que leer su contenido obviando lo que queremos "borrar" y luego volver a escribirlo todo, ya sin el dato que se ha de dar de baja.
Por otra parte, en este programa se requiere un menú de opciones y recomiendo usar métodos para cada acción, uno para escribir las altas, otro para hacer las bajas y otro para las consultas.
Te dejo una posible solución, con un menú mediante JOptionPane.
Hay comentarios explicando, pero pregunta cualquier cosa que no entiendas.
Un saludo.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import javax.swing.JOptionPane;
public class ProyectoFinal {
public static void main(String[] args) {
final String[] OPCIONES = new String[] {"Alta", "Baja", "Consulta", "SALIR"};
int opcion = 0;
do {
opcion = JOptionPane.showOptionDialog(null, "Elija opcion:", "Menu Registro",
opcion, JOptionPane.QUESTION_MESSAGE, null, OPCIONES, null);
switch(opcion) {
case 0:
String nuevoNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
"Solicitando datos", JOptionPane.QUESTION_MESSAGE);
String nuevoControl = JOptionPane.showInputDialog(null, "Ingresa el control",
"Solicitando datos", JOptionPane.QUESTION_MESSAGE);
alta(nuevoNombre, nuevoControl);
break;
case 1:
String borrarNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
"Dar de baja", JOptionPane.QUESTION_MESSAGE);
baja(borrarNombre);
break;
case 2:
String consultaNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
"Consultar", JOptionPane.QUESTION_MESSAGE);
String consulta = consulta(consultaNombre);
if (consulta == null)
JOptionPane.showMessageDialog(null, "No hay registro con ese nombre", "Consultar",
JOptionPane.WARNING_MESSAGE);
else
JOptionPane.showMessageDialog(null, "Datos encontrados:\n" + consulta, "Consultar",
JOptionPane.INFORMATION_MESSAGE);
break;
case 3:
JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA", "Salir",
JOptionPane.INFORMATION_MESSAGE);
}
}while (opcion != 3);
}
private static void alta(String nombre, String control) {
try {
BufferedWriter escritor = new BufferedWriter(new FileWriter("proyecto.txt", true));
escritor.write(nombre + " -- " + control); //Escribimos nueva linea con los datos
escritor.newLine();
escritor.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Nueva Alta",
JOptionPane.WARNING_MESSAGE);
}
}
private static void baja(String nombre) {
/*
* Para dar de baja no podemos borrar directamente del archivo.
* Hay que leer todos los datos, excepto la línea a dar de baja y
* volver a escribir el resto.
*/
StringBuilder datosLeidos = new StringBuilder(); //Aquí almacenaremos las líneas leídas
try {
BufferedReader lector = new BufferedReader(new FileReader("proyecto.txt"));
String linea = lector.readLine(); //Leemos primera línea
while (linea != null) { //Mientras hayan líneas para leer...
if (!linea.startsWith(nombre)) //Si NO es la linea que queremos dar de baja
datosLeidos.append(linea + "\n"); //La guardamos
linea = lector.readLine(); //Leemos siguiente línea
}
lector.close();
//Ya hemos leído todos los datos excepto el que queremos dar de baja.
//Volvemos a volcarlos en el archivo de texto
BufferedWriter escritor = new BufferedWriter(new FileWriter("proyecto.txt", false));
escritor.write(datosLeidos.toString());
escritor.close();
//Proceso de baja terminado.
JOptionPane.showMessageDialog(null, "Registro Actualizado", "Baja",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Baja",
JOptionPane.WARNING_MESSAGE);
}
}
private static String consulta(String nombre) {
/*
* Para consultar buscamos por nombre en el archivo de texto
* y retornamos la línea de datos que corresponde
*/
try {
BufferedReader lector = new BufferedReader(new FileReader("proyecto.txt"));
String linea = lector.readLine();
while (linea != null) {
if (linea.startsWith(nombre)) { //Nombre encontrado, no hay que seguir buscando
lector.close(); //Cerramos lector
return linea; //Retornamos línea encontrada.
}
else //Si no, seguimos consultando líneas.
linea = lector.readLine();
}
lector.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Consulta",
JOptionPane.WARNING_MESSAGE);
}
//Si durante la lectura no se ha retornado la línea buscada,
//es que no existe el nombre que se busca. Retornamos null.
return null;
}
}