Entrada/salida a un archivo en disco

prev.gif (997 bytes)chapter.gif (1105 bytes)home.gif (1054 bytes)next.gif (998 bytes)

Entrada/salida

Lectura de un archivo de texto

Lectura/escritura


Lectura de un archivo

disco.gif (1035 bytes)archivo2: ArchivoApp2.java

El proceso de lectura de un archivo de texto es similar a la lectura desde el dispositivo estándar. Creamos un objeto entrada de la clase FileReader en vez de InputStreamReader. El final del archivo viene dado cuando la función read devuelve -1. El resto del código es similar.

         FileReader entrada=null;
         StringBuffer str=new StringBuffer();
         try  {
            entrada=new FileReader("ArchivoApp2.java");
            int c;
            while((c=entrada.read())!=-1){
                str.append((char)c);
            }
       }catch (IOException ex) {}

Para mostrar el archivo de texto en la pantalla del monitor, se imprime el contenido del objeto str de la clase StringBuffer.

            System.out.println(str);

Una vez concluído el proceso de lectura, es conveniente cerrar el flujo de datos, esto se realiza en una claúsula finally que siempre se llama independientemente de que se produzcan o no errores en el proceso de lectura/escritura.

       }finally{
            if(entrada!=null){
                try{
                    entrada.close();
                }catch(IOException ex){}
            }
       }

El código completo de este ejemplo es el siguiente:

public class ArchivoApp2 {
    public static void main(String[] args) {
         FileReader entrada=null;
         StringBuffer str=new StringBuffer();
         try  {
            entrada=new FileReader("ArchivoApp2.java");
            int c;
            while((c=entrada.read())!=-1){
                str.append((char)c);
            }
            System.out.println(str);
            System.out.println("--------------------------------------");
       }catch (IOException ex) {
            System.out.println(ex);
       }finally{
//cerrar los flujos de datos
            if(entrada!=null){
                try{
                    entrada.close();
                }catch(IOException ex){}
            }
            System.out.println("el bloque finally siempre se ejecuta");
       }
    }
}

 

Lectura/escritura

disco.gif (1035 bytes)archivo3: ArchivoApp3.java

Los pasos para leer y escribir en disco son los siguientes:

  1. Se crean dos objetos de las clases FileReader y FileWriter, llamando a los respectivos constructores a los que se les pasa los nombres de los archivos o bien, objetos de la clase File, respectivamente
            entrada=new FileReader("ArchivoApp3.java");
            salida=new FileWriter("copia.java");
  1. Se lee mediante read los caracteres del flujo de entrada, hasta llegar al final (la función read devuelve entonces -1), y se escribe dichos caracteres en el flujo de salida mediante write.
            while((c=entrada.read())!=-1){
                salida.write(c);
            }
  1. Finalmente, se cierran ambos flujos llamando a sus respectivas funciones close en bloques try..catch
        entrada.close();
        salida.close();

El código completo de este ejemplo que crea un archivo copia del original, es el siguiente

import java.io.*;

public class ArchivoApp3 {
    public static void main(String[] args) {
        FileReader entrada=null;
        FileWriter salida=null;

        try  {
            entrada=new FileReader("ArchivoApp3.java");
            salida=new FileWriter("copia.java");
            int c;
            while((c=entrada.read())!=-1){
                salida.write(c);
            }
       }catch (IOException ex) {
            System.out.println(ex);
       }finally{
//cerrar los flujos de datos
            if(entrada!=null){
                try{
                    entrada.close();
                }catch(IOException ex){}
            }
            if(salida!=null){
                try{
                    salida.close();
                }catch(IOException ex){}
            }
            System.out.println("el bloque finally siempre se ejecuta");
       }
   }
}

 

Cuando se trate de leer y escribir datos binarios se sustituye FileReader por FileInputStream y FileWriter por FileOutputStream. De hecho, si se realiza esta sustitución en el código fuente de este ejemplo, los resultados no cambian.