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");
}
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);
}
}