Regitros en ficheros

Hola tengo un problema con los registros en ficheros,es decir con bajas,altas y modificar regitros.
Estoy haciend una tarea y tengo hech esto hasta el momento.Os muestro el codigo y me comentais como puedo solucionarlo.
Lo que quiero es borrar,actualizar,insertar,modificar regitros que hay en un fichero y lo utilizo desde la aplicacion y tambien insertar nuevos registros.

Esta es la clase del objeto que es un libro,la aplicacion es admnistrar una biblioteca.
 

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Payan

Este es el main

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 biblio=new ArrayList();
Main.leefichero(ruta,biblio);

ArrayList autores=new ArrayList();
int opcion=0;

// libro libros=new libro("Don quijote","1","Cervantes");
// biblio.add(libros);

boolean continuar = true;
do{
switch(Main.Menu()){
case 1:
Main.nuevo(biblio);
break;

case 2:
escribefichero(biblio);
continuar=false;
}
}while(continuar);

}

public static int Menu(){
int opcion;
int numopcion = 2;
System.out.println("1- dar de alta un libro");

System.out.println("2- 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();

libro2=new libro(titulo,codigo,autor);

biblio.add(libro2);
System.out.println(" ");
}else{
System.out.println("El Codigo introducido corresponde a un libro existente");
}

}

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 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();
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);
}

}

}