Archivos

Archivos.

 

La clase file (archivo) de la biblioteca de entrada salida de Java, proporciona una abstracción independiente de la plataforma para obtener información sobre un archivo, tales como, su ruta, carácter de separación, tamaño y fecha. Para ello debe crear un objeto File con alguno de los siguientes constructores.

 

File arch = new File(String ruta);

File arch = new File(String ruta, String nombre,);

File arch = new File(String dir, String nombre,);

 

Para saber si un archivo existe podemos utilizar el siguiente código

 

File f = new File(“temp.txt”);

 

if(f.exists())

  System.out.println(“El archivo temp.txt, si existe”);

else

  System.out.println(“El archivo temp.txt, no existe”);

 

Muchos programas necesitan extraer información a partir de un objeto. La clase RandomAccessFile (Archivo de acceso aleatorio) proporciona acceso a un archivo de manera secuencia. Para hacer la declaración procedemos como

 

String archivo = “algo.txt”;

RandomAccessFile DIS = new RandomAccessFile(archivo, "r");

 

La variable archivo representa el nombre con el cual se almacena una archivo de texto y la “r” indica que se trata de solo lectura.

 

    String linea;

    try

    {

      RandomAccessFile DIS = new RandomAccessFile(archivo, "r");

 

      while((linea=DIS.readLine())!=null)

      {

         System.out.println(linea);

      }

      DIS.close();

    }

    catch(IOException e)

    {

       System.out.println(“no pude abrir el archivo”);

    }

 

Para escribir en un archivo hacemos

 

    try

    {

      RandomAccessFile DIS = new RandomAccessFile("salida.txt", "rw");

      DIS.writeBytes("hola mundo");

      DIS.close();

    }

 

    catch(IOException e)

    {

      System.out.println("no pude abrir el archivo");

    }

 

Separación en fichas (tokens)

 

Al leer una línea, hay veces que es necesario partir la cadena en piezas especificas (conocidas como tokens). Para esto utilizaremos la clase StringTokenizer. Los constructores para esta case son:

 

StringTokenizer(String cadena, String delim, bolean devoverTokens);

StringTokenizer(String cadena, String delim);

StringTokenizer(String cadena);

 

Con estos constructores podemos hacer la separación de los elementos de una cadena de la siguiente manera.

 

StringTokenizer st = new StringTokenizer(“1001 Tips de Java”, “ “);

 

while(st.hasMoreTokens())

{

  System.out.println(“token:” + st.nextToken());

}

 

Nota: Es importante hacer el uso de las clases de entrada salida y de utilerías de java, las cuales invocamos haciendo :

 

import java.io.*;

import java.util.*;

 

al principio del programa.

 

Ejemplo.

 

Uniendo las piezas podemos construir un constructor de la clase matriz que nos permita leer de un archivo los valores de una matriz .

 

  public Matriz(String archivo) {

    String linea = "", dato = "";

    int i = 0, j = 0;

    StringTokenizer st;

    double x;

 

    Dimensiones(archivo) ;

    datos = new double[nren][ncol];

 

    try {

 

      RandomAccessFile DIS = new RandomAccessFile(archivo, "r");

 

      i = 0;

      while ( ( (linea = DIS.readLine()) != null) && i < nren) {

        st = new StringTokenizer(linea);

        if(st.countTokens() != 0)

        {

          st = new StringTokenizer(linea);

          for (j = 0; j < ncol; j++) {

            dato = st.nextToken();

            x = Double.valueOf(dato).doubleValue();

            this.datos[i][j] = x;

          }

          i++;

        }

      }

      DIS.close();

    }

    catch (IOException e) {

      JOptionPane.showMessageDialog(null, "Error" + e.toString(), "ERROR",

                                    JOptionPane.ERROR_MESSAGE);

    }

  }

 

Para leer las dimensiones de la matriz hacemos la función:

 

  public void Dimensiones(String archivo) {

    StringTokenizer st;

    String linea;

    int num_ren = 0, num_col = 0;

 

    try {

      RandomAccessFile DIS = new RandomAccessFile(archivo, "r");

 

      while ( (linea = DIS.readLine()) != null) {

        st = new StringTokenizer(linea);

        if(st.countTokens() != 0) num_ren ++;

 

        if(num_col == 0)

        {

          while (st.hasMoreTokens())

          {

            num_col++;

            st.nextToken();

          }

        }

      }

      this.nren = num_ren;

      this.ncol = num_col;

      DIS.close();

    }

    catch (IOException e) {

      JOptionPane.showMessageDialog(null, "Error" + e.toString(), "ERROR",

                                    JOptionPane.ERROR_MESSAGE);

    }

  }

 

Regresar.