Como crear un bloc de notas en Java

Un bloc de notas es un ejemplo sencillo para ver el manejo de ficheros en Java, porque podemos ver como abrir un fichero y leer su contenido y mostrarlo por pantalla y también podemos hacer la operación inversa, guardar en un fichero el contenido que tenemos en la pantalla.

Vamos a hacer un bloc de notas muy sencillo en el que solo vamos a poder abrir un fichero, guardarlo y crear un documento nuevo.

El bloc de notas

El primer paso es crear la interfaz de nuestra aplicación que es súper sencilla ya que simplemente necesitamos añadir una barra de menú para poder las opciones clásicas de abrir, guardar, nuevo, salir, etc. y un área de texto en la que poder escribir y mostrar el contenido de un archivo cuando lo abramos.


public BlocNotas() {

    ventana = new JFrame("Mi bloc de Notas");

    // Inicializa todos los elementos del menu
    JMenuBar menu = new JMenuBar();

    JMenu archivo = new JMenu("Archivo");
    JMenu ayuda = new JMenu("Ayuda");

    JMenuItem nuevo = new JMenuItem("Nuevo");
    JMenuItem abrir = new JMenuItem("Abrir...");
    JMenuItem guardar = new JMenuItem("Guardar");
    JMenuItem salir = new JMenuItem("Salir");
    JMenuItem acercaDe = new JMenuItem("Acerca de...");

    // Añade los elementos al menu
    archivo.add(nuevo);
    archivo.add(abrir);
    archivo.add(guardar);
    archivo.add(salir);
    ayuda.add(acercaDe);

    menu.add(archivo);
    menu.add(ayuda);

    // Añade la barra de menu a la ventana
    ventana.setJMenuBar(menu);

    // Cra un area de texto con scroll y lo añade a la ventana 
    notas = new JTextArea();
    JScrollPane scrollNotas = new JScrollPane(notas);
    ventana.add(scrollNotas);

    // Asigna a cada menuItem su listener
    nuevo.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            notas.setText("");
        }
    });
    abrir.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            abrirArchivo();
        }
    });
    guardar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            guardarArchivo();
        }
    });
    salir.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    // Hace visible la ventana
    ventana.setSize(1366, 728);
    ventana.setVisible(true);
    ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}   

El código es muy sencillo y además le he puesto algunos comentarios para que sea aun más fácil de entender por lo que creo que no hacen falta demasiadas explicaciones adicionales. Para que el código sea más sencillo de seguir los actionListeners están hechos directamente sin usar clases especificas para cada uno (aunque sería más adecuado hacerlo así) y en los listeners de abrir y guardar en lugar de poner todo el código dentro pues lo he separado en dos funciones que explicaremos a continuación. En cuanto a los otros 2 listeners, el de crear un archivo nuevo simplemente borra el contenido del área de texto y al pulsar en el de salir se cierra la aplicación.

Como abrir un fichero

Puesto que no vamos a saber de antemano que fichero vamos a abrir tenemos que usar JFileChooser que como su nombre indica nos permite seleccionar un archivo para luego abrirlo, guardarlo o lo que nosotros queramos. Como necesitamos un archivo le indicamos al JFileChooser que solo permita seleccionar archivos porque no tendría sentido que pudiésemos seleccionar una carpeta y vamos a permitir abrir cualquier tipo de archivo ya que en un bloc de notas se puede abrir cualquier cosa.


public void abrirArchivo() {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    if (JFileChooser.APPROVE_OPTION == fileChooser.showOpenDialog(ventana)) {
        File archivo = fileChooser.getSelectedFile();
        FileReader lector = null;
        try {
            lector = new FileReader(archivo);
            BufferedReader bfReader = new BufferedReader(lector);

            String lineaFichero;
            StringBuilder contenidoFichero = new StringBuilder();

            // Recupera el contenido del fichero
            while ((lineaFichero = bfReader.readLine()) != null) {
                contenidoFichero.append(lineaFichero);
                contenidoFichero.append("\n");
            }

            // Pone el contenido del fichero en el area de texto
            notas.setText(contenidoFichero.toString());

        } catch (FileNotFoundException ex) {
            Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                lector.close();
            } catch (IOException ex) {
                Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Para leer el contenido del fichero vamos a hacer uso de FileReader para abrir el archivo y de BufferedReader con el que iremos recorriendo el archivo línea por línea hasta terminar de leer todo su contenido. Como puedes ver el contenido del fichero se va guardando en un StringBuilder (contenidoFichero) cada vez que se lee una línea y puesto que al leer las líneas se obtiene la línea sin el salto de línea debemos de añadirlo de forma manual con \n. Finalmente ponemos el contenido leído del fichero en el área de texto.

Como guardar el fichero

De forma análoga a como lo hemos hecho para abrir un fichero usamos JFileChooser pero esta vez le indicamos que queremos que nos muestre una ventana para guardar con showSaveDialog que lo único que hace es que en lugar de mostrarnos el botón de abrir cambia su texto por guardar y aunque no hace nada más sería un poco confuso que cuando vas a guardar un archivo te muestre abrir.

La acción a hacer con el fichero la determinamos nosotros y como lo que queremos es guardar el archivo de texto usamos la clase FileWriter y guardamos todo el contenido en el archivo que tengamos seleccionado en el JFileChooser mediante el método write de FileWriter.


public void guardarArchivo() {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    if (JFileChooser.APPROVE_OPTION == fileChooser.showSaveDialog(ventana)) {
        File archivo = fileChooser.getSelectedFile();
        FileWriter escritor = null;
        try {
            escritor = new FileWriter(archivo);
            escritor.write(notas.getText());
        } catch (FileNotFoundException ex) {
            Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                escritor.close();
            } catch (IOException ex) {
                Logger.getLogger(BlocNotas.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Cuando guardamos un archivo tenemos que indicar la extensión con la que queremos hacerlo (.txt, .java, .html, etc.) y sino el archivo no tendrá extensión porque no se la hemos indicado en ningún lugar pero le pongamos la extensión que le pongamos va a ser un archivo de texto porque con FileWriter lo que se crean son archivos de texto.

Y ya esta completo nuestro sencillo bloc de notas escrito en Java listo para usarse. Si quieres puedes descargarte el código completo del ejemplo desde este enlace.

5 Comments

  1. Soldier33 25 febrero, 2014 Reply
    • Iván Salas 25 febrero, 2014 Reply
      • Soldier33 27 febrero, 2014 Reply
  2. Juan 5 abril, 2014 Reply

Leave a Reply