Вы находитесь на странице: 1из 4

CRUV-FIEC

Programación Orientada a Objetos


Introducción a los Archivos

Conocimientos Previos
En este punto es conveniente recordar el concepto de flujo y las diferencias de su
manejo según las clases java que se utilicen. Hasta el momento hemos utilizado la
fuente estándar (System.in -- teclado) y el destino (System.out -- pantalla), con la
siguiente secuencia de creación de objetos de las clases necesarias del paquete java.io.

//Creación del flujo para leer datos


InputStreamReader isr=new InputStreamReader(System.in);

//Creación del filtro para optimizar la lectura de datos


BufferedReader br=new BufferedReader(isr);
System.out.print("Teclea el primer numero: ");

//Lectura de datos mediante el método readLine()


String texto1=br.readLine();

System.out.println("Despliega los resultados….”);

Adicionalmente se hizo énfasis en la importancia de controlar los posibles


errores de entrada y salida (excepciones) con el try …catch.

Archivos o ficheros o files


Java puede almacenar y leer diferentes tipos de información de archivos tales
como: binarios, objetos java, texto, comprimidos, etc. En esta clase nos ocuparemos de
los archivo de texto y orientaremos las operaciones de lectura y grabación de registros o
líneas, de manera similar a como tratamos los objetos de entrada y salida por defecto,
eso significa que usaremos las mismas clases para manejar archivos.

Java nos ofrece la clase FILE que permite crear instancias asociadas con el
nombre de un archivo, no con su contenido, pero que facilita el manejo de directorios y
de archivos en los subdirectorios, cambiar nombres, verificar existencia de archivos, etc,
como ejemplo tenemos:

Metodo Propósito
boolean exists() Verifica existencia del archivo
boolean isFile() Verifica si es un archivo
boolean isDirectory() … o un directorio
String[] list() Retorna nombres de archivos y directorios
String getName() Devuelve nombre de un directorio o archivo
String getPath() Devuelve la ruta o path de un archivo o directorio

Por otra parte observemos como definimos y preparamos un archivo para su


lectura o grabación.

Diego Santimateo G.
CRUV-FIEC
Programación Orientada a Objetos
Con FileReader creamos un objeto para asociar el nombre lógico del archivo con
su nombre físico o contenido. El constructor de FileReader puede aceptar un objeto de
la clase File o un nombre de archivo capturado o leído de otro archivo.

FileReader arch1 = new FileReader(“nombre del archivo.txt”);

Usamos la clase BufferedReader ya conocida, para utilizar su método readLine y


leer cada línea del archivo de texto.

BufferedReader in = new BufferedReader(arch1);


String s = new String();
while((s = in.readLine())!= null){
// se procesa la línea leída
}
Compruebe la lectura de un archivo de texto leyendo cada línea de su contenido
y desplegándola en la consola, usando la siguiente codificación. Prepare tres archivos de
texto, uno que corresponda a un programa Java previamente utilizado, otro de un
documento HTML (copie el ejemplo de: http://www.programacion.com/html/tutorial/curso/3/ y
guárdelo en la misma carpeta que contiene su programa Java, con la extensión .html) y otro creado con el
bloc de notas.

import java.io.*;
import javax.swing.*;
public class LeeconReader {
public static void main(String[] args) {
String archivoName;
archivoName = JOptionPane.showInputDialog(null, "Indique nombre de archivo:");
try {
FileReader arch1 = new FileReader(archivoName);
BufferedReader in = new BufferedReader(arch1);
String s = new String();

while((s = in.readLine())!= null) //lectura del archivo


System.out.println("\nRegistro: "+ s);

try {
in.close();
}
catch ( IOException e )
{
System.err.println( "El archivo no se pudo cerrar correctamente" );
System.exit( 1 );
}

System.exit(0); //cierra hilo abierto por ventana de diálogo


}
catch (Exception e)
{
System.err.println("***Error al leer o abrir el archivo...\n" +e);
}

} //fin main
} // fin de la clase LeeconReader

En el siguiente ejemplo se utiliza la subclase LineNumberReader de la clase


BufferedReader en consecuencia, también contiene el método readLine(). Con esta
clase se puede llevar el control del número de línea que se está leyendo o procesando.

Diego Santimateo G.
CRUV-FIEC
Programación Orientada a Objetos
Revise cuidadosamente y pruebe el programa con los archivos utilizados en el ejemplo
anterior.
/* Ejemplo de programa que lee un archivo secuencial con el método readLine de la clase BufferedReader*/
import java.io.*;
public class LeeNumeroRegistro{
public static void main(String[] args) throws Exception{
File file = null;
FileReader freader = null;
LineNumberReader lnreader = null; //tiene el método readLine
try{
file = new File("dato.txt");
freader = new FileReader(file);
lnreader = new LineNumberReader(freader);
String line = "";
while ((line = lnreader.readLine()) != null){
System.out.println("Linea" + lnreader.getLineNumber() + ": " + line);
}
}
finally{ // cuando termina el try se realize finally
freader.close();
lnreader.close();
}
}
}

Con el próximo ejemplo se copia un archivo, pero la lectura se realiza sin usar
BufferedReader, solo FileReader y el método read. Se crea un nuevo archivo
datos1.txt. Verifica su contenido y comenta. ¿Puedes copiar el mismo archivo usando
BufferedReader? Intenta grabar usando la clase FileWriter y PrintWriter con el
método println, de manera similar a como se usa FileReader, BufferedReader y
readline. No olvides comentar. Conviene mostrar resultados al facilitador.

import java.io.*;
// No usa Buffered Reader para leer
public class LeeconRead {
public static void main(String[] args) throws IOException {
File inputFile = new File("dato.txt"); //archivo de entrada
File outputFile = new File("datos1.txt"); //archivo de salida

FileReader in = new FileReader(inputFile);


FileWriter out = new FileWriter(outputFile);
int c;

while ((c = in.read()) != -1 ) //método de FileReader


{
out.write(c);
System.out.println("\n Archivo:\n "+ c);
}
in.close();
out.close();
}
}

En caso de dudas, inquietudes o si simplemente quieres hacer un comentario,


está disponible un foro en Synergia, para compartir al respecto.

Diego Santimateo G.
CRUV-FIEC
Programación Orientada a Objetos
Experimenta con el siguiente ejemplo, identifica clases, objetos y métodos.
Determina para qué sirve el siguiente programa y expresa los resultados de
tu experiencia en el foro. ¿Qué cosas descubriste?

import java.io.FileReader;

public class LeeconRead {


/* Este programa sirve para: */

public static void main(String args[]) {


try {
FileReader fr = new FileReader(“su.archivo”]);
int i;
while ((i = fr.read()) != -1) {
char c = (char) i;
System.out.print("\ncaracter ="+ c);
}

fr.close();
}
catch (Exception e) {
System.out.println("Exception: " + e);
}
} // fin del main()
} // fin de la clase

Hasta la próxima clase, espero que la sigan pasando muy bien.

Sugerencia: Investiga los métodos de cada una de las clases utilizadas en


los ejemplos.

Referencias
http://www.iua.upf.es/~hsolis/PIII/sesion08.html
http://www.cica.es/formacion/JavaTut/Intro/tabla.html
http://www.javacoffeebreak.com/books/extracts/javanotesv3/c10/s2.html
http://www.chuidiang.com/java/novatos/editor/leer_escribir_fichero.php
http://www.programacion.com/java/tutorial/excepciones/

Diego Santimateo G.

Вам также может понравиться