import java.util.*; import java.io.*; // Ejemplo de manejo de listas ligadas implementando un mini editor de texto, con las siguientes funciones // (0) Editar (1) Insertar (2) Borrar (3) Seleccionar (4) Copiar (5) Pegar (6) Cortar // 10) buscar (11) Remplazar (15) Grabar (16) Leer (20) Salir // // (0) Editar: Edita la linea indicada (debe pedir el numero de linea (rango de 1 a numero total de numeroLineas) // (1) Insertar: Inserta una linea en la posicion indicada (rango 0 a total de numeroLineas, si se indica 0 es antes de todas las numeroLineas, si es el numero total de numeroLineas es al final del archivo) // (2) Borrar: Borra la linea indicada (rango de 1 al numero total de numeroLineas) // ... public class Editor { // Lista para almacenar el contenido private List l; // Nombre del archivo private String nombreArchivo; // Constructor public Editor() { nombreArchivo = "SinNombre"; l = new LinkedList(); } // Retorna el numero de numeroLineas del editor public int numeroLineas() { return l.size(); } // Visualiza el menu public void visualizaMenu() { System.out.println("(0) Editar (1) Insertar (2) Borrar (3) Seleccionar (4) Copiar (5) Pegar (6) Cortar"); System.out.println("(10) buscar (11) Remplazar (15) Grabar (16) Leer (20) Salir"); System.out.println("Que quieres hacer?"); } // Visualiza el contenido public void visualiza() { System.out.println("Archivo: " + nombreArchivo); System.out.println("---------------------------------------------------------------------------------------"); for (int i = 0; i < l.size(); i++) { System.out.println((i + 1) + " | " + l.get(i)); } System.out.println("---------------------------------------------------------------------------------------"); } // Adiciona una linea public void adiciona(String cad, int pos) { // Hay que poder adicionarla donde indique pos l.add(cad); } // Cambia el contenido de una linea public void cambia(String cad, int pos) { } // Retorna el contenido de una linea public String linea(int pos) { String t = ""; // hacer return t; } // Leer el archivo public void leerArchivo(String nombre) { nombreArchivo = nombre; File archivo = null; FileReader fr = null; BufferedReader br = null; try { // Apertura del fichero y creacion de BufferedReader para poder // hacer una lectura comoda (disponer del metodo readLine()). archivo = new File (nombreArchivo); fr = new FileReader (archivo); br = new BufferedReader(fr); l = new LinkedList(); // Lectura del fichero String linea; while((linea = br.readLine()) != null) l.add(linea); } catch(Exception e) { e.printStackTrace(); } finally { // En el finally cerramos el fichero, para asegurarnos // que se cierra tanto si todo va bien como si salta // una excepcion. try { if( null != fr ) { fr.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } // Grabar el archivo public void grabarArchivo() { } // Control del editor public static void main( String[] args ) { // objeto para trabajar con teclado Scanner teclado = new Scanner(System.in); Editor e = new Editor(); String archivo, tmp; // Revisa si hay argumentos en la linea de comandos if(args.length != 0) { archivo = args[0]; e.leerArchivo(archivo); } int op = 1, act; // Menu do { e.visualiza(); e.visualizaMenu(); op = Integer.parseInt(teclado.nextLine()); switch(op) { case 0: // Edita do { System.out.println("Edita que linea? "); act = Integer.parseInt(teclado.nextLine()); if(act < 0 || act > e.numeroLineas()) System.out.println("Error en la linea, rango de 0 a " + e.numeroLineas()); } while(act < 0 || act > e.numeroLineas()); System.out.println(e.linea(act)); System.out.println("Valor? "); tmp = teclado.nextLine(); e.cambia(tmp, act); case 1: // adiciona do { System.out.println("Adicionar en que linea? "); act = Integer.parseInt(teclado.nextLine()); if(act < 0 || act > e.numeroLineas()) System.out.println("Error en la linea, rango de 0 a " + e.numeroLineas()); } while(act < 0 || act > e.numeroLineas()); System.out.println("Valor? "); tmp = teclado.nextLine(); e.adiciona(tmp, act); break; case 15: // Grabar e.grabarArchivo(); break; case 16: // Leer archivo System.out.println("Archivo? "); tmp = teclado.nextLine(); e.leerArchivo(tmp); break; case 20: // Salir System.out.println("Fin del programa de edicion"); break; default: System.out.println("Opcion no reconocidad"); } } while(op != 20); } }