<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">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&lt;String&gt; l;
   // Nombre del archivo
   private String nombreArchivo;

   // Constructor
   public Editor() {
      nombreArchivo = "SinNombre";
      l = new LinkedList&lt;String&gt;();

   }

   // 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 &lt; 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&lt;String&gt;();
         // 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 &lt; 0 || act &gt; e.numeroLineas()) System.out.println("Error en la linea, rango de 0 a " + e.numeroLineas());
            } while(act &lt; 0 || act &gt; 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 &lt; 0 || act &gt; e.numeroLineas()) System.out.println("Error en la linea, rango de 0 a " + e.numeroLineas());
            } while(act &lt; 0 || act &gt; 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);

   }

}
</pre></body></html>