escritura y lectura de ficheros

14
Escritura y Lectura de Ficheros El tema de hoy son los ficheros o creación de archivos sobre java. En este tema veremos un ejemplo de como crear, escribir y leer un archivo de texto desde nuestra aplicación Java. Este punto puede ser necesario cuando desarrollemos algún tipo de software; imaginemos que realizamos un software y necesitamos hacer lectura de ciertos datos los cuales no necesariamente lo tendremos en un motor de base de datos si no en un archivo de texto común y corriente. Claro que estos datos también podrían estar en un archivo xml si no lo quisiéramos en un motor de base de datos, pero este tema que es un poco más avanzado lo veremos en algún otro post en el futuro. Por lo tanto estos datos lo tendremos accesible en un archivo de texto. Dicho lo anterior empecemos con la parte aplicativa. Estructura del proyecto -Creamos un proyecto en NetBeans con el nombre de "Archivos" -Al árbol del proyecto con la clase y el formulario respectivo debería quedar de la siguiente forma.

Upload: jose-alexander

Post on 27-Dec-2015

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Escritura y Lectura de Ficheros

Escritura y Lectura de Ficheros

El tema de hoy son los ficheros o creación de archivos sobre java. En este tema veremos un ejemplo de como crear, escribir y leer un archivo de texto desde nuestra aplicación Java.

Este punto puede ser necesario cuando desarrollemos algún tipo de software; imaginemos que realizamos un software y necesitamos hacer lectura de ciertos datos los cuales no necesariamente lo tendremos en un motor de base de datos si no en un archivo de texto común y corriente. Claro que estos datos también podrían estar en un archivo xml si no lo quisiéramos en un motor de base de datos, pero este tema que es un poco más avanzado lo veremos en algún otro post en el futuro. Por lo tanto estos datos lo tendremos accesible en un archivo de texto.

Dicho lo anterior empecemos con la parte aplicativa.

Estructura del proyecto

-Creamos un proyecto en NetBeans con el nombre de "Archivos"-Al árbol del proyecto con la clase y el formulario respectivo debería quedar de la siguiente forma.

Ahora nuestro formulario principal (frmPrincipal) debería quedar diseñado de la siguiente forma.

Page 2: Escritura y Lectura de Ficheros

Para este caso un botón donde se creará e ingresará el texto a un archivo y el primer campo para ingresar el texto deseado y la segunda parte del formulario sería para la lectura del texto de dicho archivo.

Código Fuente

Para escribir y leer el texto sólo crearemos dos métodos en nuestra clase "ControlArchivo" para luego simplemente llamar a sus métodos en cada botón de escritura y lectura independientemente.

Para este ejemplo se está haciendo con una dirección estática la cual ya se define en el método pero esto puede variar ya que a su disposición puede ser que se le pase la dirección del archivo desde un campo de texto o un "FileChoser" en Java, lo cual sirve para capturar y ver archivos del sistema así como sus direcciones y otros. Por otro lado veamos que en los comentarios de la línea de código indica que cierto punto es específicamente para Windows mientras que otra línea que se usa en este caso es para la dirección de una posición en linux. Tener cuidado al momento de copiar el código y cambiar la dirección donde se creará y leerá el archivo.

Dicho lo anterior veamos el código.

Código de la clase "ControlArchivo"

Esta clase debería quedar de la siguiente forma.

/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Clases;

Page 3: Escritura y Lectura de Ficheros

import java.io.*;import javax.swing.JOptionPane;import javax.swing.JTextArea;

public class ControlArchivo {      public void EscribirArchivo(String texto)    {        FileWriter miArchivo = null;        PrintWriter escrinirArchivo;              try        {            //Esta linea va en caso de windows pero ahora trabajamos con            //una dirección sobre linux                      //miArchivo = new FileWriter("c:\\MiArchivoDeTexto.txt",true);                      //El parámetro true es para agregar el texto al final del archivo            //en caso que exista. Si se desea reeamplazar el archivo existente            //quitar el parametro true                      miArchivo = new FileWriter("/home/kaaf/MiArchivoDeTexto.txt",true);            escrinirArchivo = new PrintWriter(miArchivo);            escrinirArchivo.println(texto);            JOptionPane.showMessageDialog(null, "Texto Ingresado Correctamente");

        }        catch (Exception ex)        {            JOptionPane.showMessageDialog(null, ex.getMessage());        }        finally        {            try            {                if (null != miArchivo)                {                    miArchivo.close();                }            }            catch (Exception ex1)            {                JOptionPane.showMessageDialog(null, ex1.getMessage());            }        }    }

Page 4: Escritura y Lectura de Ficheros

      public void LeerArchivo(JTextArea textArea)    {        File archivo;        FileReader leerArchivo=null;              try        {            //Usar esta línea en caso de windows            //File archivo = new File ("c:\\MiArchivoDeTexto.txt");                      //Esta línea se usa para apuntar a archivo de linux            archivo = new File ("/home/kaaf/MiArchivoDeTexto.txt");                      leerArchivo = new FileReader (archivo);            BufferedReader memoriaParaLectura = new BufferedReader(leerArchivo);                      String linea=null;                      textArea.setText("");            while((linea = memoriaParaLectura.readLine())!=null)            {                textArea.append(linea);                textArea.append("\n");            }        }        catch (Exception ex)        {            JOptionPane.showMessageDialog(null, ex.getMessage());        }        finally        {            try            {                if (null != leerArchivo)                {                    leerArchivo.close();                }            }            catch (Exception ex1)            {                JOptionPane.showMessageDialog(null, ex1.getMessage());            }        }    }}

Page 5: Escritura y Lectura de Ficheros

Para mayor explicación de ciertos puntos del código, existen algunas líneas comentadas.

Código del botón "Ingresar Texto al Archivo"

Aquí sólo se instancia la clase que tenemos y llámamos al método "EscribirArchivi" mandando como parámetro el texto que ingresamos en el primer JTextArea.

private void btnIngresarActionPerformed(java.awt.event.ActionEvent evt) {        new ControlArchivo().EscribirArchivo(txtIngresarTexto.getText());    }

Código del botón "Leer Texto del Archivo"

En este caso se leerá el texto del archivo que creamos y se cargarán tales líneas de texto en el segudno JTextArea (Si no creamos el archivo y dicho archivo no existe de antemano, se lanzará una excepción indicando que el archivo no existe)

private void btnLeerActionPerformed(java.awt.event.ActionEvent evt) {        new ControlArchivo().LeerArchivo(txtLeerTexto);    }

En este caso le pasamos como parámetro el segundo JTextArea. Claro que existe mejores formas de realizar esto ya que el texto leido podría retornarse en un array de String, una lista u otro, pero se hace esto por rapidez y facilidad de entendimiento.

Resultado final de la aplicación

Una vez compilemos la aplicación, debería funcionar con datos de la siguiente forma (Importante: Para el funcionamiento de la aplicación, se debe tener los permisos de escritura necesario en la posición del archivo que indiquemos. Muchas veces no funciona al querer escribir en la raiz del disco local C de windows, aunque esto se puede editar en los permisos de la unidad o de la carpeta dada. Tener presente esto).

Page 6: Escritura y Lectura de Ficheros

En el siguiente post veremos como buscar una palabra en un archivo de texto.

Manipulacion de archivos:lectura de un archivo de texto en java

Leer un archivo de texto en java no es muy complicado, en resumen es un proceso muy similar a leer texto escrito del teclado, y para hacerlo necesitaremos hacer uso de las siguientes clases, la clase File, FileReader y BufferedReader.

Por favor ve el siguiente vídeo para ver como se lee archivos de texto en java y ver el programa de lectura en ejecución, espero en que te ayude a entender mejor como se leen archivos de texto en java, o si no sigue leyendo este articulo para copiar el codigo fuente directamente y ver el modo de uso.

A continuación he colocado el método ”leer” el cual tiene un parametro llamado “nombre” el cual es el nombre del archivo, en el coloca preferentemente la ruta completa del archivo de texto del cual deseas leer su contenido.El codigo de lectura es el siguiente:

Descarga:

Codigo fuente

 

01 import java.io.*;

02

03 public String leer(String nombre)

Page 7: Escritura y Lectura de Ficheros

04

05//El parametro nombre indica el nombre del archivo por ejemplo "prueba.txt"

06

07 {

08

09 try{

10

11 File f;

12 FileReader lectorArchivo;

13

14 //Creamos el objeto del archivo que vamos a leer

15 f = new File(nombre);

16

17//Creamos el objeto FileReader que abrira el flujo(Stream) de datos para realizar la lectura

18 lectorArchivo = new FileReader(f);

19

20//Creamos un lector en buffer para recopilar datos a travez del flujo "lectorArchivo" que hemos creado

21 BufferedReader br = new BufferedReader(lectorArchivo);

22

23 String l="";

24//Esta variable "l" la utilizamos para guardar mas adelante toda la lectura del archivo

25

26 String aux="";/*variable auxiliar*/

27

28 while(true)

29 //este ciclo while se usa para repetir el proceso de lectura, ya que

Page 8: Escritura y Lectura de Ficheros

se lee solo 1 linea de texto a la vez

01 {

02 aux=br.readLine();

03 //leemos una linea de texto y la guardamos en la variable auxiliar

04 if(aux!=null)

05 l=l+aux+"n";

06 /*si la variable aux tiene datos se va acumulando en la variable l,

07 * en caso de ser nula quiere decir que ya nos hemos leido todo

08 * el archivo de texto*/

09

10 else

11 break;

12 }

13

14 br.close();

15

16 lectorArchivo.close();

17

18 return l;

19

20 }catch(IOException e){

21 System.out.println("Error:"+e.getMessage());

22 }

23 return null;

24 }

 

Page 9: Escritura y Lectura de Ficheros

Modo de uso:

 

1/*simplemente manda a llamar el metodo colocando en su argmento el nombre del archivo*/

2 leer("C:Usersnombredemipcprueba.txt");

 

Como resultado leeras el archivo de texto..

¿Problemas con la ruta o Path? Como seleccionar gráficamente un archivo para leerlo

Simplemente con una pequeña modificación a nuestro codigo utilizando la libreria javax.swing con el objeto JFileChooser

 

Creamos un objeto JFileChooser el cual sirve para elegir graficamente un archivo, lo elegimos y con el codigo acontinuación generaremos una variable tipo String(texto) que contendra ela ruta o el Path completo hacia nuestro archivo, luego solo ejecutamos el metodo “leer”.

 

1 javax.swing.JFileChooser j= new javax.swing.JFileChooser();

2

3 j.showOpenDialog(j);

4

5 String path= j.getSelectedFile().getAbsolutePath();

6

7 leer(path);

 

Codigo para leer un archivo de texto gráficamente:

Como nota este método es simple y esta diseñado para leer archivos de texto, leer otro tipo de archivos ocasionara que el programa se cierre.

Page 10: Escritura y Lectura de Ficheros

El codigo es el siguiente:

 

01 public String leerGrafico()

02

03 {

04

05 File f;

06

07 javax.swing.JFileChooser j= new javax.swing.JFileChooser();

08

09 j.showOpenDialog(j);

10

11 try{

12

13 String path= j.getSelectedFile().getAbsolutePath();

14

15 String lectura="";

16

17 f = new File(path);

18

19 try{

20

21 FileReader fr = new FileReader(f);

22

23 BufferedReader br = new BufferedReader(fr);

24

25 String aux;

Page 11: Escritura y Lectura de Ficheros

26

27 while((aux = br.readLine())!=null)

28

29 lectura = lectura+aux+"n";

30

31 }catch(IOException e){}

32

33 return lectura;

34

35 }catch(NullPointerException e){

36

37javax.swing.JOptionPane.showMessageDialog(j, "Has seleccionado cerrar programa, saliendo...");

38

39 System.exit(0);

40

41 }return null;

42

43 }