Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Borrar registro en fichero

Buenas soy nuevo en el foro y tengo una gran duda que no se como resolver a ver si me pudierais ayudar, gracias. Una parte del ejercicio me pide:
-Borrar empleado. Pedirá al usuario el número de seguro social del empleado a borrar, y si existe, lo borrará del fichero.
Yo en el fichero tengo lo siguiente:
Nombre: Juan, Nº Seguro Social: 2222a
Nombre: Jose, Nº Seguro Social: 3333b
Nombre: Maria, Nº Seguro Social: 4444c
Y por teclado le introduzco el Nº Seguro Social de uno de los empleados y QUIERO QUE BORRE TODA LA LINEA y no la borra, a no ser que escriba la linea "Nombre: Jose, Nº Seguro Social: 3333b" por ejemplo....
CODIGO:
public void borrarEmpleado () {
File f = new File("C:\\Users\\Tesi\\Documents\\NetBeansProjects\\GestionEmpleados\\src\\usa_empleado\\empleados.dat");
System.out.println("Introduce nº seguridad social del empleado a borrar: ");
String lineaBorrar=teclado.nextLine();
try {
if (!f.isFile()) {
System.out.println("El parámetro no es un archivo existente");
return;
}
// Construir el nuevo archivo que posteriormente se cambió el nombre al nombre de archivo original .
File tempFile = new File(f.getAbsolutePath() + ".dat");
BufferedReader br = new BufferedReader(new FileReader(f));
PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
String line = null;
// Leer desde el archivo original y escribir en el nuevo
// menos que los datos se adapte al contenido que deben eliminarse.
while ((line = br.readLine()) != null) {
if (!line.trim().equals(lineaBorrar)) {
pw.println(line);
pw.flush();
}
}
pw.close();
br.close();
// Eliminar el archivo original
if (!f.delete()) {
System.out.println("No se pudo borrar el archivo");
return;
}
// Cambie el nombre del nuevo archivo al nombre de archivo del archivo original tenía .
if (!tempFile.renameTo(f))
System.out.println("No se puede cambiar el nombre de archivo");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
}

marzo 24, 2015 | Registered Commentertesi

En tu variable lineaBorrar solo tienes el número de la Seguridad Social, no el contenido de la línea, por lo que if (!line.trim().equals(lineaBorrar)) nunca será verdadero

Prueba con if (!line.trim().contains(lineaBorrar))

marzo 24, 2015 | Registered Commenterchoces

Muchisimas gracias de verdad ahora si que funciona, vaya quebradero de cabeza que llevaba en lo alto y era cambiar una simple palabra. Muchas gracias :)

marzo 24, 2015 | Registered Commentertesi

No es una "simple palabra" :)

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#contains-java.lang.CharSequence-

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#equals-java.lang.Object-

marzo 24, 2015 | Registered Commenterchoces