Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema ArchivosEnJava
Tema ArchivosEnJava
Tema
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.
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.
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.
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.
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 Santana
Clase OutputStream
La clase OutputStream es similar a la clase InputStream. 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.
Clase DataInputStream
Mtodos de DataInputStream
boolean readBoolean() throws IOException 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.
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.
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.
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.
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 Santana
FileOutputStream
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); } } }
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 Santana
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.
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.).
Archivos de texto
Las clases involucradas para entrada y salida sobre un archivo de texto son las siguientes: FileOutputStream PrintWriter Para operaciones de escritura
FileReader BufferedReader
Observemos el siguiente ejemplo:
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) { } } }
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.
byte
char double float int long short String
readFloat()
readInt() readLong() readShort() readUTF()
void void void void void void void void void void void