Está en la página 1de 32

Programacin Orientada a Objetos

Tema

Haga clic para modificar el estilo de subttulo del patrn

4/26/12

Archivos

Programacin Orientada a Tema Archivos Objetos


Introduccin a los Archivos

En informtica, un archivo es un grupo de datos estructurados que son almacenados en algn medio y pueden ser usados por las aplicaciones. Tienen como finalidad guardar datos de forma permanente. Una vez que acaba la aplicacin, los datos almacenados estn disponibles para que otra aplicacin pueda recuperarlos para su consulta o modificacin.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Introduccin a los Archivos
Cada archivo es individual y es identificable por un nombre y una extensin opcional que suele identificar su formato. El formato permite identificar en la mayora de ocasiones el contenido del archivo. Los nombres de archivos originalmente tenan un lmite de ocho caracteres ms tres caracteres de extensin, actualmente permiten muchos ms caracteres dependiendo del sistema de archivos.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos en Java
Java considera los archivos como flujos secuenciales de bytes. Cada archivo termina con un marcador de fin de archivo o bien en un nmero de byte especfico registrado en una estructura de datos mantenida por el sistema. Para poder leer o escribir en un archivo, es necesario "abrirlo" previamente. Cuando se abre un archivo, se crea un objeto y se asocia un flujo (Stream) a dicho objeto.
MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos en Java
Si queremos procesar archivos en Java necesitamos importar el paquete java.io Este paquete incluye las definiciones de las clases de flujos como FileInputStream (para el flujo de entrada de un archivo) y FileOutputStream (para el flujo de salida a un archivo). Los archivos se abren creando objetos de estas clases de flujo que se derivan de las clases InputStream y OutputStream, respectivamente. Las clases InputStream y OutputStream son clases abstractas que definen mtodos para realizar operaciones de entrada y salida. MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Parte de la jerarqua de clases del paquete java.io

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clase InputStream
Los objetos InputStream poseen un mtodo de lectura, read(), que tiene el efecto lateral de eliminar el byte o bytes ledos, en vez de copiarlos. Otro mtodo interesante implementado por las subclases de InputStream es el mtodo close(), ste libera los recursos utilizados por el sistema, y como consecuencia, hace que sean imposibles posteriores operaciones de lectura. Siempre se debe cerrar un objeto InputStream, mediante el mtodo close() , cuando se haya dejado de utilizar. Las signaturas de dichos mtodos son: int read() throws IOException void close() throws IOException MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clase OutputStream

La clase OutputStream InputStream.

es

similar

la

clase

Una instancia de OutputStream proporciona un lugar en donde nuestro programa puede escribir uno o ms bytes. Tambin dispone del mtodo close(), el cual, una vez ejecutado, no permite realizar ms operaciones sobre dicho flujo. Siempre se debe cerrar un objeto OutputStream, mediante el mtodo close() , cuando se haya dejado de utilizar. MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clases DataInputStream y Data OutputStream
Estas dos clases resultan muy tiles, puesto que en la gran mayora de aplicaciones que necesitan entrada y/o salida de datos, se querr leer o escribir elementos ms complejos que simples bytes. Por ejemplo, si se requiere leer o escribir un entero, en lugar de tener que leer 4 bytes y convertirlos a un valor entero. Estas clases nos van a permitir realizar operaciones de entrada y salida de tipos de datos. Las clases DataInputStream y DataOutputStream pueden verse como clases wrapper para InputStream y OutputStream, tienen acceso a todos los mtodos de sus clases padre, y aaden las funcionalidades necesarias para leer o escribir cualquier tipo primitivo Java. MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clase DataInputStream

La clase DataInputStream (flujo de entrada de datos) tiene un nico constructor:

DataInputStream (InputStream in)


Que construye un nuevo DataInputStream, usando el argumento InputStream como fuente. todos los mtodos relacionados a esta clase pueden ocasionar una excepcin del tipo IOException. Algunos de los mtodos disponibles son:

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Mtodos de DataInputStreamthrows IOException boolean readBoolean()
Un valor 0 representa false, y cualquier otro valor representa true. Este mtodo lee un byte del flujo de datos y retorna el valor booleano asociado. byte readByte() throws IOException Lee y devuelve un nico byte. Se considera que dicho byte tiene signo, por lo que puede representar cualquier valor entre 128 y 127 char readChar() throws IOException Lee dos bytes y devuelve el correspondiente carcter. double readDouble() throws IOException Lee ocho bytes y devuelve el correspondiente valor double. float readFloat() throws IOException Lee cuatro bytes y devuelve el correspondiente valor float. int readInt() throws IOException Lee cuatro bytes y devuelve el correspondiente valor int. long readLong() throws IOException Lee ocho bytes y devuelve el correspondiente valor long. short readShort() throws IOException Lee dos bytes y devuelve el correspondiente valor short.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clase DataOutputStream
La clase DataOutputStream (flujo de salida de datos) dispone de mtodos similares a los anteriores, pero para escritura, por ejemplo: writeBoolean() writeByte() etc Como veremos a continuacin, para realizar operaciones de entrada y salida de tipos de datos primitivos, se usarn objetos de las clases DataInputStream y DataOutputStream junto con las clases de flujos de archivos.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Entrada y Salida de Archivos
Los archivos nos van a permitir almacenar fsicamente un conjunto de datos relacionados lgicamente. En Java, los programadores deben estructurar los archivos de forma que satisfagan las necesidades de las aplicaciones. Para usar un archivo como una fuente de bytes para lectura o como escritura, Java proporciona las clases FileInputStream y FileOutputStream.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


FileInputStream
Tiene tres constructores, de los cuales mostraremos dos: FileInputStream (String nombreArchivo) throws FileNotFoundException, SecurityException FileInputStream (File f) throws FileNotFoundException, SecurityException El primero de ellos crea un nuevo FileInputStream asociado al archivo cuyo nombre se especifica como argumento, y el segundo crea una nueva instancia asociada al argumento File. FileOutputStream se define de forma similar.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


FileInputStream
Un FileInputStream es un InputStream, debido a la herencia, de forma que puede usarse como argumento en el constructor de DataInputStream. Haciendo esto, se pueden utilizar los mtodos de DataInputStream para leer cualquier tipo primitivo de un archivo. Para abrir un archivo con un nombre determinado, todo lo que se necesita hacer es: Abrir un archivo para lectura FileInputStream fstr = new FileInputStream(nombre); DataInputStream in = new DataInputStream(fstr); o bien podramos haber eliminado la primera instruccin, de forma que: DataInputStream in = new DataInputStream(new FileInputStream(nombre)); MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


FileOutputStream

Si lo que se quiere es escribir en un archivo, debemos utilizar FileOutputStream Abrir un archivo para escritura: FileOutputStream fstr = new FileOutputStream (nombre); DataOutputStream in = new DataOutputStream (fstr);

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Entrada/Salida de tipos primitivos

Ejemplo Entrada/Salida de tipos primitivos

MTI. Jos Antonio Velzquez

public class Escribe { public static void main(String[] args) { int arreglo[]={20,40,-50,100,-34}; FileOutputStream fos=null; DataOutputStream dos; try { fos=new FileOutputStream("numeros.val"); } catch (FileNotFoundException ex) { Logger.getLogger(Escribe.class.getName()).log(Level.SEVERE, null, ex); } dos=new DataOutputStream(fos); try { for(int i=0;i<arreglo.length;i++) dos.writeInt(arreglo[i]); dos.close(); fos.close(); } catch (IOException ex) { Logger.getLogger(Escribe.class.getName()).log(Level.SEVERE, null, ex); } } }

public class Lectura { public static void main(String[] args) { FileInputStream fis=null; DataInputStream dis; try { fis=new FileInputStream("numeros.val"); } catch (FileNotFoundException ex) { Logger.getLogger(Lectura.class.getName()).log(Level.SEVERE, null, ex); } dis=new DataInputStream(fis); try { while(fis.available()!=0){ int valor=dis.readInt(); System.out.println(valor); } fis.close(); dis.close(); } catch (IOException ex) { Logger.getLogger(Lectura.class.getName()).log(Level.SEVERE, null, ex); } } }

Programacin Orientada a Tema Archivos Objetos


El archivo es un bloque de bytes, dependiendo de los tipos y numero de datos que se almacenan, se determina su tamao 20 40 -50 100 -34 Tamao del archivo 20 bytes

Los datos almacenados son del tipo int, por lo tanto tienen un tamao de 4 bytes MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clasificacin de los archivos
Clasificacin de los archivos segn el acceso a la informacin almacenada: Acceso secuencial: El acceso al contenido, es de registro por registro, hasta encontrar alguno en particular o hasta llegar al final del archivo Acceso directo o aleatorio: Se puede acceder a un registro directamente, sin necesidad de avanzar registro a registro.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Clasificacin de los archivos
Clasificacin de los archivos segn el tipo de la informacin almacenada: Archivos Binarios: Almacenan secuencias de bytes. No pueden ser ledos o comprendidos directamente. Ficheros de Texto: Almacenan caracteres alfanumricos en un formato estndar (ASCII, Unicode, UTF8, UTF16, etc.). Pueden ser ledos y/o modificados por aplicaciones denominadas editores de texto (Ej: Notepad, UltraEdit, Editplus, etc.).

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de texto

Las clases involucradas para entrada y salida sobre un archivo de texto son las siguientes:

FileOutputStream PrintWriter FileReader BufferedReader

Para operaciones de escritura

Para operaciones de lectura

Observemos el siguiente ejemplo:

MTI. Jos Antonio Velzquez

Clase que permite almacenar texto en un archivo de Texto public class Escritura { public static void main(String[] args) { FileOutputStream fos=null; PrintWriter pw; try { fos = new FileOutputStream("algo.txt"); } catch (FileNotFoundException ex) { } pw=new PrintWriter(fos); pw.write("esto es una prueba\n"); pw.write("archivos de texto\n"); pw.write("creado con java"); pw.close(); try { fos.close(); } catch (IOException ex) { } } }

Clase que permite obtener el contenido de un archivo de texto


public class Lectura { public static void main(String[] args) { FileReader fr=null; BufferedReader br=null; try { fr=new FileReader("algo.txt"); } catch (FileNotFoundException ex) { } br=new BufferedReader(fr); String cadena; try { cadena = br.readLine(); while(cadena!=null) { System.out.println(cadena); cadena=br.readLine(); } } catch (IOException ex) { } try { br.close(); fr.close(); } catch (IOException ex) { } } }

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
Un archivo de acceso aleatorio permite leer o escribir datos en forma no secuencial. El contenido de un archivo suele consistir en un conjunto de partes o registros, generalmente de distinto tamao. Una bsqueda de informacin en el archivo equivale a ubicar un determinado registro. En el acceso secuencial es preciso leer el archivo pasando por todos sus registros hasta llegar al registro que se desea ubicar. Con el acceso aleatorio se puede ubicar un registro de manera directa, conociendo el numero de bytes que se debe avanzar para su localizacin MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
La clase java.io.RandomAccessFile implementa las interfaces DataInput y DataOutput, lo cual permite leer y escribir en el archivo. Para usar RandomAccessFile se debe indicar un nombre de archivo para abrir o crear si no existe. Se debe indicar tambin si se abrir para lectura o tambin para escritura RandomAccessFile f1 = new RandomAccessFile("archiuno.sda", "r"); RandomAccessFile f2 = new RandomAccessFile("archidos.dat", "rw"); MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
Una vez abierto el archivo pueden usarse los mtodos read() o write() definidos en las interfaces DataInput y DataOutput para realizar operaciones de entrada salida sobre los archivos. La clase RandomAccessFile maneja un puntero al archivo (file pointer). Este puntero indica la posicin actual en el archivo. Cuando el archivo se crea el puntero al archivo se coloca en 0, apuntando al principio del archivo. Las sucesivas llamadas a los mtodos read() y write() ajustan de manera automtica el puntero, segn la cantidad de bytes ledos o escritos. MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
La clase RandomAccessFile tiene mtodos especficos para manipular el puntero al archivo: int skipBytes(int): Mueve el puntero hacia adelante la cantidad especificada de bytes. void seek(long): Ubica el puntero justo antes del byte especificado en el entero long. long getFilePointer(): Devuelve la posicin actual del puntero, el nmero de byte indicado por el entero long devuelto.

MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
boolean readBoolean()Reads abooleanfrom this file. byte readByte()Reads a signed eight-bit value from this file. char readChar()Reads a character from this file. double readDouble()Reads adoublefrom this file. float readFloat()Reads afloatfrom this file. int readInt()Reads a signed 32-bit integer from this file. long readLong()Reads a signed 64-bit integer from this file. short readShort()Reads a signed 16-bit number from this file. String readUTF()Reads in a string from this file. MTI. Jos Antonio Velzquez

Programacin Orientada a Tema Archivos Objetos


Archivos de acceso aleatorio
write(byte[]b)Writesb.lengthbytes from the specified byte array to this file, starting at the current file pointer. void writeBoolean(booleanv) Writes abooleanto the file as a one-byte value. void writeByte(intv) Writes abyteto the file as a one-byte value. void writeBytes(Strings)Writes the string to the file as a sequence of bytes. void writeChar(intv)Writes acharto the file as a two-byte value, high byte first. void writeChars(Strings)Writes a string to the file as a sequence of characters. void writeDouble(doublev) void writeFloat(floatv) void writeInt(intv) void writeLong(longv) MTI. JoswriteShort(intv) Antonio Velzquez void void

Programacin Orientada a Tema Archivos Objetos


Consideraciones para el manejo

También podría gustarte