Ficheros y registros

Hola amigos! he realizado un tarea ,en java,el cual utiliza registros de un fichero ,evidentemente es mas eficaz una base de datos pero el
profesor ha decido que quiere que la realizemos de esta forma.

Bien, el problema esta en que la primera vez que ejecuto me va bien pero cuando vuelvo a utilizar la aplicacion,el archivo se ha modificado
de tal forma que me hace varias copias de del primer registro ,Haber si teneis algun ejemplo de insertar,eliminar,modificar registros de un determinado objeto .

Ahora voy a pasar el codigo que tengo ,un saludo amigo! espero que me podais ayudar.

import java.util.*;

    public class libro{
        private String codigo;
        private String titulo;
        private String autor;
        private String fecha;
        private String nif;
        private int numero;
        private boolean prestado;

        public String getCodigo(){
            return codigo;
        }

        public String getTitulo(){
        return titulo;
        }

        public String getAutor(){
            return autor;
        }

        public String getFecha(){
            return fecha;
        }

        public String getnif(){
            return nif;
        }

        public int getNumeroPrestamo(){
            return numero;
        }

        public boolean getPrestado(){
            return prestado;
        }

        public void setFecha(String fecha){
            this.fecha=fecha;
        }
        public void setnif(String nif){
            this.nif=nif;
        }

        public void setCodigo(String cod){
            this.codigo=cod;

        }
        public void setTitulo(String tit){
            this.titulo=tit;
        }
        public void setAutor(String aut){
            this.autor=aut;
        }

        libro  (){}
        libro (String titulo,String codigo,String autor){
            this.titulo=titulo;
            this.codigo=codigo;
            this.autor=autor;
            Date fechaactual=new Date();
            this.fecha=fechaactual.toString();
            this.nif="00000000A";
            this.numero=0;
            this.prestado=false;
    }
        libro (String titulo,String codigo,String autor,String fecha,String nif,int numero,boolean prestado){
            this.titulo=titulo;
            this.codigo=codigo;
            this.autor=autor;
            this.fecha=fecha;
            this.nif=nif;
            this.numero=numero;
            this.prestado=prestado;
        }

        public boolean prestar(){
        boolean correcto=false;
        if(!prestado){
            numero=numero+1;
            prestado=true;
            correcto=true;
            }
        return correcto;
    }

        public boolean devolver(){
            boolean correcto=true;
            if(prestado){
                prestado=false;
                correcto=true;
            }
            return correcto;
        }

        public String muestraEstado(){
            String estado;
            if(prestado)
            estado="prestado";
            else{
            estado="disponible";
            }
            return estado;

    }

        public String datos(){
            String cadena;
            cadena="CODIGO: "+codigo+" TITULO: "+titulo;
            return cadena;
        }
    }

<\code>

<code>
import java.util.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.StringTokenizer;

public class Main {
public static leer teclado=new leer();
public static libro libro2=new libro();

    public static void main(String[] args) throws IOException {
       String ruta="C:\\Users\\6daw\\Desktop\\d.txt";
       ArrayList <libro> biblio=new ArrayList();
       Main.leefichero(ruta,biblio);
       
       
       ArrayList <libro> autores=new ArrayList();
       int opcion=0;
       
//      libro libros=new libro("Don quijote","1","Cervantes");
//       biblio.add(libros);
//       libros=new libro("Lobo gris","AAAAA","Max Broocks");
//       biblio.add(libros);
//       libros=new libro("Leyendas de Idun","IIIII","Laura Gallego");
//       biblio.add(libros);

       boolean continuar = true;
       do{
       switch(Main.Menu()){
           case 1:
                Main.nuevo(biblio);
               break;
           case 2:
                Main.prestar(biblio);
               break;
           case 3:
                Main.devolver(biblio);
               break;
           case 4:
                Main.consultar(biblio);
               break;
           case 5:
                Main.listado(biblio);
               break;
           case 6:
                Main.buscar(biblio);
           case 7:
               escribefichero(biblio);
               continuar=false;
       }
       }while(continuar);

    }
    public static int Menu(){
        int opcion;
        int numopcion = 7;
        System.out.println("1- dar de alta un libro");
        System.out.println("2- Prestar un libro");
        System.out.println("3- Devolver un libro");
        System.out.println("4- Consultar un libro");
        System.out.println("5- Mostrar listado de libros");
        System.out.println("6- Busqueda");
        System.out.println("7- Salir");
        do{

            opcion=teclado.datoInt();
            if(!(opcion<= numopcion && opcion >= 1))
                System.out.println("Introduzca una opcion valida");
            }while(!(opcion<= numopcion && opcion >=1 ));
        return opcion;

        }
   
   
    public static void nuevo(ArrayList biblio) throws IOException{

        System.out.println(" ");
    System.out.println("Introduzca el codigo");
    String codigo=teclado.dato();
    if(Main.existe(biblio, codigo)==-1){
        System.out.println(" ");
        System.out.println("Introduce el Titulo");
        String titulo=teclado.dato();
        titulo=titulo.trim();
        titulo=titulo.toUpperCase();
        System.out.println(" ");
        System.out.println("Introduce el Autor");
        String autor=teclado.dato();
        Date fechaActual=new Date();
        String fecha=fechaActual.toString();
        System.out.println(" ");
        System.out.println("Introduce el Nif");
        String nif=teclado.dato();
       libro2=new libro(titulo,codigo,autor,fecha,nif,0,false);
           
        biblio.add(libro2);
        System.out.println(" ");
    }else{
        System.out.println("El Codigo introducido corresponde a un libro existente");
    }

    }

    public static void prestar(ArrayList biblio)throws IOException{
        System.out.println("Introduzca el codigo del libro que va ha prestar");
        String codigo=teclado.dato();
        if(Main.existe(biblio, codigo)!=-1){
        int guarda=Main.existe(biblio, codigo);
        libro2=(libro)biblio.get(guarda);
        if(libro2.getPrestado()){
            System.out.println(" ");
            System.out.println("El libro ya esta prestado ");
            System.out.println(" ");
        }else{
            libro2.prestar();
            System.out.println(" ");
            System.out.println(" libro  prestado");
            System.out.println(" ");
       
        }

    }
    }

    public static void devolver(ArrayList biblio)throws IOException{
        System.out.println("Introduzca el codigo del libro que va ha devolver");
        String codigo=teclado.dato();
        if(Main.existe(biblio, codigo)!=-1){
            int guarda=Main.existe(biblio, codigo);
            libro2=(libro)biblio.get(guarda);
            if(libro2.getPrestado()){
                libro2.devolver();
                System.out.println(" ");
                System.out.println("El libro ha sido devuelto ");
                System.out.println(" ");
            }else{
                System.out.println(" ");
                System.out.println("el libro ya a sido devuelto");
                System.out.println(" ");
            }
        }
    }

    public static void consultar(ArrayList biblio)throws IOException{
        libro es=new libro();
        System.out.println("Introduzca el codigo del libro que desea consultar");
        String codigo=teclado.dato();
        if(Main.existe(biblio, codigo)!=-1){
            int guarda=Main.existe(biblio, codigo);
            libro2=(libro)biblio.get(guarda);
            System.out.println(" ");
            System.out.println("autor: "+libro2.getAutor()+" titulo: "+libro2.getTitulo()+" Estado: "+libro2.muestraEstado());
            System.out.println(" ");
            }else{
                System.out.println(" ");
                System.out.println("libro no existente");
                System.out.println(" ");
            }
           
            }
    public static void listado(ArrayList biblio) throws IOException{

        for( int i=0 ; i < biblio.size(); i++){
        libro2=(libro)biblio.get(i);
        System.out.println("autor: "+libro2.getAutor()+" titulo: "+libro2.getTitulo()+" Estado: "+libro2.muestraEstado());

    }
    }

    public static void buscar(ArrayList biblio)throws IOException{
        System.out.println("¿Que desea buscar?");
        System.out.println("1- Autor");
        System.out.println("2- Titulo");
        int op=teclado.datoInt();
        switch(op){
            case 1:
                System.out.println("Escriba el nombre del autor que desea buscar");
                String aut=teclado.dato();
                aut=aut.trim();
                aut=aut.toUpperCase();
               
               

        }

    }

    public static int existe(ArrayList biblio,String codigo){
        int cont=-1;

        for( int i=0 ; i < biblio.size(); i++){
            libro2=(libro)biblio.get(i);
            if(libro2.getCodigo().equals(codigo))
                cont=i;

    }
        return cont;
    }

    static void escribefichero(ArrayList biblio){
    String linea;

    try{
        FileWriter fw=new FileWriter("C:/Users/6daw/Desktop/d.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        for( int i=0 ; i < biblio.size() ; i++){
            libro2=(libro)biblio.get(i);
            linea=libro2.getTitulo()+","+libro2.getCodigo()+","+libro2.getAutor()+","+libro2.getnif();
        bw.write(linea);
            bw.newLine();
               
        }
        bw.flush();
        bw.close();
        fw.close();
    }
    catch(IOException ex){

         System.out.println("fallo al escribir");
    }

    }

    public static void leefichero(String ruta ,ArrayList biblioteca)  {
 
 
        try {
          FileReader  fr = new FileReader(ruta);
          BufferedReader br=new BufferedReader (fr);
          String linea;
    int x=0;

            while ((linea = br.readLine()) != null) {
                StringTokenizer cadena=new StringTokenizer(linea,"/",false);
                while(cadena.hasMoreTokens()){
                    x++;
                switch(x){
                    case 1:
                        String tit= cadena.nextToken();
                        libro2.setTitulo(tit);
                        break;
                    case 2:
                        String cod=cadena.nextToken();
                        libro2.setCodigo(cod);
                        break;
                    case 3:
                        String aut=cadena.nextToken();
                        libro2.setAutor(aut);
                        x=0;
                        break;
                          }

                }
                biblioteca.add(libro2);

            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
   
   

       
    }

}

<\code>