0% encontró este documento útil (0 votos)
384 vistas17 páginas

Manejo de Archivos en JAVA

Este documento describe cómo manejar archivos en Java utilizando las clases File, FileInputStream, FileOutputStream, DataInputStream y DataOutputStream. Estas clases permiten crear, leer, escribir y obtener información de archivos locales y URLs. Los objetos File representan archivos y directorios del sistema de archivos, mientras que los streams permiten la entrada y salida de datos de archivos de manera secuencial.

Cargado por

Adrian Gaucin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
384 vistas17 páginas

Manejo de Archivos en JAVA

Este documento describe cómo manejar archivos en Java utilizando las clases File, FileInputStream, FileOutputStream, DataInputStream y DataOutputStream. Estas clases permiten crear, leer, escribir y obtener información de archivos locales y URLs. Los objetos File representan archivos y directorios del sistema de archivos, mientras que los streams permiten la entrada y salida de datos de archivos de manera secuencial.

Cargado por

Adrian Gaucin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 17

Manejo de Archivos en JAVA

La forma de interactuar con los sistemas de archivos locales se realiza a travs de la clase File, esta clase proporciona muchas utilidades relacionadas con archivos y con la obtencin de informacin bsica sobre esos archivos.

Creacin de un objeto File


Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes: 1. File miArchivo; miArchivo = new File( "path/mi_archivo" ); 2. iArchivo = new File( "path","mi_archivo" ); 3. ile miDirectorio = new File( "path" ); miArchivo = new File( miDirectorio,"mi_archivo" );

Comprobaciones y Utilidades
Una vez creado un objeto File, se puede utilizar uno de los siguientes mtodos para reunir informacin sobre el archivo:

Nombres de archivo: String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo( File nuevoNombre ) Comprobaciones: boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute() Informacin general del archivo: long lastModified() long length() Utilidades de directorio: boolean mkdir() String[] list() Hay muchas clases dedicadas a la obtencin de entrada desde un archivo. Este es el esquema de la jerarqua de clases de entrada por archivo:

Objetos FileInputStream
Los objetos FileInputStream tpicamente representan archivos de texto accedidos en orden secuencial, byte a byte. Con FileInputStream, se puede elegir acceder a un byte, varios bytes o al archivo completo.

Apertura de un FileInputStream
Para abrir un FileInputStream sobre un archivo, se le da al constructor un String o un objeto File:
FileInputStream mi ArchivoSt; miArchivoSt = new FileInputStream( "/etc/kk" );

Tambin se puede utilizar:


File miArchivo FileInputStream miArchivoSt; miArchivo = new File( "/etc/kk" ); miArchivoSt = new FileInputStream( miArchivo );

Lectura de un FileInputStream
Una vez abierto el FileInputStream, se puede leer de l. El mtodo read() tiene muchas opciones:
int read(); //Lee un byte y devuelve -1 al final del stream. int read( byte b[] ); //Llena todo el array, si es posible. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream. int read( byte b[],int offset,int longitud );//Lee longitud bytes en b comenzando por b[offset]. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream.

Cierre de FileInputStream

Cuando se termina con un archivo, existen dos opciones para cerrarlo: explcitamente, o implcitamente cuando se recicla el objeto (el garbage collector se encarga de ello). Para cerrarlo explcitamente, se utiliza el mtodo close(): miArchivoSt.close();

Objetos DataInputStream
Los objetos DataInputStream se comportan como los FileInputStream. Los streams de datos pueden leer cualquiera de las variables de tipo nativo, como floats, ints o chars. Generalmente se utilizan DataInputStream con archivos binarios.

Apertura y cierre de DataInputStream


Para abrir y cerrar un objeto DataInputStream, se utilizan los mismos mtodos que para FileInputStream:
DataInputStream miDStream; FileInputStream miFStream; // Obtiene un controlador de archivo miFStream = new FileInputStream "/etc/ejemplo.dbf" ); //Encadena un archivo de entrada de datos miDStream = new DataInputStream( miFStream ); // Ahora se pueden utilizar los dos streams de entrada para // acceder al archivo (si se quiere...) miFStream.read( b ); i = miDStream.readInt(); // Cierra el archivo de datos explcitamente //Siempre se cierra primero el archivo stream de mayor nivel miDStream.close(); miFStream.close();

Lectura de un DataInputStream
Al acceder a un archivo como DataInputStream, se pueden utilizar los mismos mtodos read() de los objetos FileInputStream. No obstante, tambin se tiene acceso a otros mtodos diseados para leer cada uno de los tipos de datos:
byte readByte(); int readUnsignedByte(); short readShort(); int readUnsignedShort(); char readChar(); int readInt(); long readLong(); float readFloat(); double readDouble(); String readLine()

Cada mtodo leer un objeto del tipo pedido.

Para el mtodo String readLine(), se marca el final de la cadena con \n, \r, \r\n o con EOF. Para leer un long, por ejemplo:
long numeroSerie; ... numeroSerie = miDStream.readLong();

Streams de entrada de URLs


Adems del acceso a archivos, Java proporciona la posibilidad de acceder a URLs como una forma de acceder a objetos a travs de la red. Se utiliza implcitamente un objeto URL al acceder a sonidos e imgenes, con el mtodo getDocumentBase() en los applets:
String imagenFich = new String( "imagenes/pepe.gif" ); imagenes[0] = getImage( getDocumentBase(),imagenFich );

No obstante, se puede proporcionar directamente un URL, si se quiere:


URL imagenSrc; imagenSrc = new URL( "http://enterprise.com/~info" ); imagenes[0] = getImage( imagenSrc,"imagenes/pepe.gif" );

Apertura de un Stream de entrada de URL


Tambin se puede abrir un stream de entrada a partir de un URL. Por ejemplo, se puede utilizar un archivo de datos para un applet:
ImputStream is; byte buffer[] = new byte[24]; URL( getDocumentBase(),datos).openStream(); is = new

Ahora se puede utilizar is para leer informacin de la misma forma que se hace con un objeto FileInputStream:
is.read( buffer,0,buffer.length ); NOTA: Debe tenerse muy en cuenta que algunos usuarios pueden haber configurado la seguridad de sus navegadores para que los applets no accedan a archivos.

La contrapartida necesaria de la lectura de datos es la escritura de datos. Como con los Streams de entrada, las clases de salida estn ordenadas jerrquicamente:

Objetos FileOutputStream
Los objetos FileOutputStream son tiles para la escritura de archivos de texto. Como con los archivos de entrada, primero se necesita abrir el archivo para luego escribir en l.

Apertura de un FileOutputStream
Para abrir un objeto FileOutputStream, se tienen las mismas posibilidades que para abrir un archivo stream de entrada. Se le da al constructor un String o un objeto File.
FileOutputStream miArchivoSt; FileOutputStream( "/etc/kk" ); miArchivoSt = new

Como con los streams de entrada, tambin se puede utilizar:


File miArchivo FileOutputStream miArchivoSt; miArchivo = new File( "/etc/kk" ); miArchivoSt = new FileOutputStream( miArchivo );

Escritura en un FileOutputStream
Una vez abierto el archivo, se pueden escribir bytes de datos utilizando el mtodo write(). Como con el mtodo read() de los streams de entrada, tenemos tres posibilidades:
void write( int b );//Escribe un byte. void write( byte b[] );//Escribe todo el array, si es posible. void write( byte b[],int offset,int longitud );//Escribe longitud bytes en b comenzando por b[offset].

Cierre de FileOutputStream
Cerrar un stream de salida es similar a cerrar streams de entrada. Se puede utilizar el mtodo explcito: miArchivoSt.close(); O, se puede dejar que el sistema cierre el archivo cuando se recicle miArchivoSt.

Streams de salida con buffer


Si se trabaja con gran cantidad de datos, o se escriben muchos elementos pequeos, ser una buena idea utilizar un stream de salida con buffer. Los streams con buffer ofrecen los mismos mtodos de la claseFileOutputStream, pero toda salida se almacena en un buffer. Cuando se llena el buffer, se enva a disco con una nica operacin de escritura; o, en caso necesario, se puede enviar el buffer a disco en cualquier momento.

Creacin de Streams de salida con buffer


Para crear un stream BufferedOutput, primero se necesita un stream FileOutput normal; entonces se le aade un buffer al stream:
FileOutputStream miFileStream; BufferdOutpurStream miBufferStream; // Obtiene un controlador de archivo miFileStream = new FileOutputStream( "/tmp/kk" ); // Encadena un stream de salida con buffer miBufferStream = new BufferedOutputStream( miFileStream );

Volcado y Cierre de Streams de salida con buffer


Al contrario que los streams FileOutput, cada escritura al buffer no se corresponde con una escritura en disco. A menos que se llene el buffer antes de que termine el programa, cuando se quiera volcar el buffer explcitamente se debe hacer mediante una llamada a flush():
// Se fuerza el volcado del buffer a disco miBufferStream.flush(); // Cerramos el archivo de datos. Siempre se ha de cerrar primero el // archivo stream de mayor nivel miBufferStream.close(); miFileStream.close();

Streams DataOutput
Java tambin implementa una clase de salida complementaria a la clase DataInputStream. Con la clase DataOutputStream, se pueden escribir datos binarios en un archivo.

Apertura y cierre de objetos DataOutputStream


Para abrir y cerrar objetos DataOutputStream, se utilizan los mismos mtodos que para los objetos FileOutputStream:
DataOutputStream miDataStream; FileOutputStream miFileStream; BufferedOutputStream miBufferStream; // Obtiene un controlador de archivo miFileStream = new FileOutputStream( "/tmp/kk" ); // Encadena un stream de salida con buffer (por eficiencia)

miBufferStream = new BufferedOutputStream( miFileStream ); // Encadena un archivo de salida de datos miDataStream = new DataOutputStream( miBufferStream ); // Ahora se pueden utilizar los dos streams de entrada para // acceder al archivo (si se quiere) miBufferStream.write( b ); miDataStream.writeInt( i ); // Cierra el archivo de datos explcitamente. Siempre se cierra // primero el archivo stream de mayor nivel miDataStream.close(); miBufferStream.close(); miFileStream.close();

Escritura en un objeto DataOutputStream


Cada uno de los mtodos write() accesibles por los FileOutputStream tambin lo son a travs de los DataOutputStream. Tambin encontrar mtodos complementarios a los de DataInputStream:
void writeBoolean( boolean b ); void void writeShort( int i ); void writeChar( writeInt( int i ); void writeFloat( float writeDouble( double d ); void writeBytes( writeChars( string s ); writeByte( int i ); int i ); void f ); void String s ); void

Para las cadenas, se tienen dos posibilidades: bytes y caracteres. Hay que recordar que los bytes son objetos de 8 bits y los caracteres lo son de 16 bits. Si nuestras cadenas utilizan caracteres Unicode, debemos escribirlas con writeChars().

Contabilidad de la salida
Otra funcin necesaria durante la salida es el mtodo size(). Este mtodo simplemente devuelve el nmero total de bytes escritos en el archivo. Se puede utilizar size() para ajustar el tamao de un archivo a mltiplo de cuatro. Por ejemplo, de la forma siguiente:
int numBytes = miDataStream.size() % 4; i < numBytes; i++ ) miDataStream.write( 0 ); for( int i=0;

Archivos de Acceso Aleatorio


A menudo, no se desea leer un archivo de principio a fin; sino acceder al archivo como una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del archivo. Java proporciona una claseRandomAccessFile para este tipo de entrada/salida.

Creacin de un Archivo de Acceso Aleatorio

Hay dos posibilidades para abrir un archivo de acceso aleatorio: Con el nombre del archivo: miRAFile = new RandomAccessFile( String nombre,String modo ); Con un objeto File: miRAFile = new RandomAccessFile( File archivo,String modo );

El argumento modo determina si se tiene acceso de slo lectura (r) o de lectura/escritura (r/w). Por ejemplo, se puede abrir un archivo de una base de datos para actualizacin:
RandomAccessFile miRAFile; miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );

Acceso a la Informacin
Los objetos RandomAccessFile esperan informacin de lectura/escritura de la misma manera que los objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las clasesDataInputStream y DataOutputStream. Tambin se tienen muchos mtodos para moverse dentro de un archivo: long getFilePointer(); Devuelve la posicin actual del puntero del archivo: void seek( long pos ); Coloca el puntero del archivo en una posicin determinada. La posicin se da como un desplazamiento en bytes desde el comienzo del archivo. La posicin 0 marca el comienzo de ese archivo: long length();

Devuelve la longitud del archivo. La posicin length() marca el final de ese archivo.

Archivos: Son el almacenamiento secundario por excelencia Existen varios tipos de archivos: Archivos de texto Archivos binarios secunciales. Archivos de Texto: Son aquellos archivos que solo almacenan datos de tipo carcter o cadena de caracteres. Son utilizados para: - Informacin de tipo registro - Guardar informacin que no necesite de un formato especifico Guardar informacin de cualquier otro tipo en estos archivos no es una solucin ptima. Archivos binarios de acceso secuencial A diferencia de los archivos de texto, en estos archivos se almacenan datos de todo tipo (char, long, float, int etc.). Los tipos de datos que se almacenan es estos archivos se guardan de manera binaria, de acuerdo a la extensin que tengan los tipos de datos. Los datos se guardan de manera secuencial, es decir, uno tras de otro. Cuando queremos accesar a un dato, es este tipo de archivos, tenemos que leer cada dato, hasta encontrar aquel que andamos buscando. Cmo abrir archivos en Java? - Hasta ahora toda la entrada y salida (E/S I/O), ha sido con la consola. Los objetos ms primitivos de entrada y salida con la consola System.in, System.out, System.err, estn comprendidos dentro de BufferedReader y PrintWriter que permiten una interface ms conveniente y refinada. - Pero tambin pueden ser usados para el manejo de archivos. La entrada y salida de archivos queda disponible al utilizar las siguientes declaraciones: BufferedReader FileIn = new BufferedReader (new fileReader(nombre de archivo)); PrintWriter fileOut=

new PrintWriter (new FileWriter(nombre de archive)); PrintWriter fileApnd= (new PrintWriter(nombredearchivo, true); El argumento nombre de archivo que aparece en las declaraciones, es simplemente un String que indica el nombre de archivo que se desea abrir. Cuando se abre un archivo para grabar (output), su contenido se borra. Si queremos abrir un archivo para agregar (append) informacin, debemos utilizar un constructor FileWriter en la declaracin fileApnd. Si le pasamos false a este constructor, logramos el mismo efecto que el contructor para la declaracin de fileOut . Si abrimos un archivo que no existe, para grabar sobre el, este ser creado por el sistema y comenzar, desde luego, estando vacio. La utilizacin de objetos de E/S con archivos. La utilizacin es la misma que para E/S con consola. // leyendo de un archivoint x=Integer.parseInt(fileInt.readLine( )); //leyendo de la consolaint x=Integer.parseInt(stdIn.readLine( )); Existen dos areas que requieren atencin adicional cuando manejamos E/S con archivos. La inicializacion de los objetos de E/S con archivos, puede ser una tarea no tan exitosa. Puede ser que el archivo que se desee abrir no se encuentre, lo cual lanza una excepcin FileNotFoundException. Esto podria ser por que la cadena entregada al constructor puede ser el nombre de un archivo inexistente o que no se encuentra en el directorio de trabajo del programa Al momento de leer o escribir un archivo se puede lanzar IOException. Cmo cerrar archivos en Java? - Cada archivo abierto ocupa recursos del sistema, por tanto debemos cerrar cada archivo que deja de utilizarse. Infile.close( ); outFile.close( ); - Tanto el metodo close de la clase BufferedReader como el de la clase PrintWriter lanzan la excepcin IOException. En resumen:

Cuando hablamos de manejo de archivos tenemos que tener en cuenta 3 pasos: 1 Abrir el archivo. 2 Realizar operacin deseada: leer y/o escribir datos en el archivo. 3 Cerrar el archivo

OPERACIONES CON ARCHIVOS DE TEXTO En Java, puede utilizar el objeto file para realizar operaciones bsicas de E/S dearchivos, tales como crear, abrir, leer un archivo y escribir en el. Por ejemplo puedeutilizar los mtodos de la clase File para realizar operaciones de E/S de archivos, talcomo utilizar los mtodos createNewFile o delete de la clase File para eliminar o crear un archivo. Puede utilizar las clases Buffered Reader y Buffered Writer para leer yescribir el contenido de archivo

4. Operaciones fundamentales de Procesamiento de Archivos


4.1 Tipos de Archivos por su localizacin

Physical File: Coleccin de bytes almacenados en un disco o cinta Logical File: Un "canal" (como una lnea telefnica ) que encapsula los detalles acerca de la localizacin y formato fsico de un archivo

Cuando un archivo desea utilizar un archivo particular ej. "data" , el sistema operativo debe buscar el archivo fsico "data" y hacer el supuesto enlace hacia el asignndole un archivo lgico. Este archivo lgico tiene un nombre lgico .

4.2 Tipos de Archivos por su contenido (Binarios y de Texto)


Un archivo se dice que es de tipo texto si todo su contenido est almacenado en forma de cadenas de caracteres. ej: "cadena de texto 12345" Un archivo binario por su parte guarda la representacin en bytes del tipo de datos que se est manejando ej: "cadena de texto cf"

4.3 Abriendo y Cerrando Archivos


Abriendo Archivos

Una vez que se ha entablado el enlace con el archivo es necesario declarar lo que intentamos hacer con el:

Abrir un archivo existente Crear un archivo nuevo

Esto hace que el archivo este listo para usarse por el programa Estamos posicionados al principio del archivo, listos para leer o escribir fd= open (filename, flags [,pmode]); fd= file descriptor filename= physical file name flags= O_APPEND, O_CREAT, O_EXCL, O_RDOINLY, O_RDWR, O_TRUNC, O_WRONLY pmode= rwe (Owner) rwe (Group) rwe (Others) Cerrando archivos

Pone como disponible el nombre lgico empleado para este archivo Se asegura de que todos los datos mandados al archivo se hayan guardado, incluyendo aquellos que an estaban en los buffer de memoria El sistema operativo se encarga de realizar esta operacin, a menos que el programa tenga una salida anormal.

fclose(fd)

4.4 Modos de acceso a un archivo


Secuencial

Existe un apuntador que indica la posicin actual a leer o escribir

Se abre el archivo y se va leyendo/escribiendo secuencialmente, de inicio a fin

Aleatorio o Directo

Existe un apuntador que indica la posicin actual a leer o escribir Este apuntador es mvil, se puede desplazar a cualquier posicin del archivo (adelante o atrs) Se abre el archivo y se puede leer/escribir en cualquier posicin

4.5 Operaciones comunes al emplear archivos


Lectura

De dnde vamos a leer (archivo de entrada) Dnde vamos a guardar lo que leemos ( variables o atributos ) Cunto vamos vamos a leer (byte count)

Escritura

Dnde vamos a escribir (archivo de salida) Qu vamos a guardar (variables o atributos ) Cuntos bytes vamos a escribir

Seeking

Un programa no necesariamente tiene que leer secuencialmente; puede "brincar" a localizaciones especficas del archivo (archivos de acceso aleatorio) A esta operacin se le conoce como "seeking" Al nmero de posiciones que se mueve el apuntador se le conoce como "offset"

4.6 Streams

Stream (stream of water) Es una secuencia ordenada de bytes de una longitud sin determinacin. Existen 2 tipos de streams

Input streams: mueven bytes de datos hacia algn programa desde alguna fuente (generalmente externa) Output streams: mueven bytes de datos desde algn programa hacia un destino externo. Nota: lo anterior no es una regla puede haber streams que trabajen con datos hacia y desde programas.

Estos streams estn relacionados con los dispositivos de entrada y salida que se mencionan a continuacin y tambien se pueden redireccionar desde los mismos programas Ejemplo desde Java: System.setErr(PrintStream err), System.setIn(InputStream in) Dispositivos de I/O Stdin, Stdout, Stderr (0) Stdin: dispositivo estndar de entrada (teclado) (1) Stdout: dispositivo estndar de salida (consola) (2) Stderr: dispositivo estndar de error (de nuevo la consola) Redireccionamiento:
1>filename

# Redirect stdout to file "filename".


1>>filename

# Redirect and append stdout to file "filename".


2>filename

# Redirect stderr to file "filename".


2>>filename

# Redirect and append stderr to file "filename".


&>filename

# Redirect both stdout and stderr to file "filename".


2>&1

# Redirects stderr to stdout.

# Error messages get sent to same place as standard output.


0< FILENAME < FILENAME

# Accept input from a file.


Bibliografa Eric+S.Roberts,+The+Art+&+Science+of+Java,+AddisonXWesley+ (2008).+ The+Java+Tutorials (ltima+consulta,+30+de+mayo+de+2011). The+Java+Language+Specification+(Third+edition) (ltima+consulta,+ 30+mayo+2011). Kathy+Sierra+& Bert+Bates,+Head+First+Java,+OReilly+(2003).+ http://es.scribd.com/doc/17121620/Archivos-de-texto-y-punteros-en-java http://ict.udlap.mx/people/carlos/is215/ir04.html http://www.magusoft.net/trials/texto.html

diferencia
En general se podria decir que todos los archivos son binarios, sin embargo tienen una diferencia radical. En un archivo de texto cada serie de 8 bits corresponde a un equivalente en el codigo ASCII que puede ser una letra, un numero, un simbolo, etc. (Tambien depende el tipo de codificacion que se use para dicho archivo) En cambio un archivo binario, el conjunto de bits tiene un arreglo y una longitud que puede variar de un archivo a otro, en inclusive de una longitud a otra. Dicho esto, podrias crear un archivo mp3 completito si supieras el orden exacto de cada uno de los bits que se necesitan para componerlo. Habra que tomar en cuenta tambien que una cancion normal tiene 3MB y que estos tres megas tienen en total: 3145728 bits, asi que si conoces la posicion de estos tres millones de bits podrias "recrear una rola".

Definicin Archivos Texto Binarios

Definicin de archivos de texto y binarios


Los archivos de texto plano son aquellos que estn compuestos nicamente por texto sin formato, solo caracteres. estos caracteres se pueden codificar de distintos modos dependiendo de la lengua usada. Se les conoce tambin como archivos de texto llano o texto simple por carecer de informacin destinada a generar formatos y tipos de letra.

Un archivo binario es una archivo informtico que contiene informacin de cualquier tipo, codificada en forma binaria para el propsito de almacenamiento y procesamiento de ordenadores. Muchos formatos binarios contienen partes que pueden ser interpretados como texto. Un archivo binario que solo contiene informacin de tipo textual sin informacin sobre el formato del mismo, se dice que es un archivo de texto plano. Habitualmente se contraponen los trminos archivo binario y archivo de texto de forma que los primeros no contienen solamente texto.

También podría gustarte