SlideShare ist ein Scribd-Unternehmen logo
1 von 8
Downloaden Sie, um offline zu lesen
Universidad Mariano Galvez
 Facultad de Ingeniería
 Programación Avanzada




Manejo de Archivos
           en JAVA
           Geovin Antonio Morales Martínez
                            0910-07-13606




              La Antigua Guatemala, 04 de agosto de 2007.
Universidad Mariano Galvez, Programación Avanzada

                            Manejo de Archivos en JAVA
        La forma de interactuar con los sistemas de archivos locales se realiza a través de la clase File,
esta clase proporciona muchas utilidades relacionadas con archivos y con la obtención de información
básica sobre esos archivos.

                                 Creación 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. miArchivo = new File( "path","mi_archivo" );
   3. File 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 métodos para reunir
información 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()
    ● Información general del archivo: long lastModified() long length()
    ● Utilidades de directorio: boolean mkdir() String[] list()


 Hay muchas clases dedicadas a la obtención de entrada desde un archivo. Este es el esquema de la
jerarquía de clases de entrada por archivo:




                                  Objetos FileInputStream
       Los objetos FileInputStream típicamente 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.
                                                                                                       2/8
Universidad Mariano Galvez, Programación Avanzada

                                   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" );
          También 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 método 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 número
de bytes leídos 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 número de bytes leídos o -1 si se alcanzó el
final del stream.

                                       Cierre de FileInputStream
        Cuando se termina con un archivo, existen dos opciones para cerrarlo: explícitamente, o
implícitamente cuando se recicla el objeto (el garbage collector se encarga de ello).
        Para cerrarlo explícitamente, se utiliza el método 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 métodos 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();

                                                                                                   3/8
Universidad Mariano Galvez, Programación Avanzada


     // Cierra el archivo de datos explícitamente
     //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 métodos read()
de los objetos FileInputStream. No obstante, también se tiene acceso a otros métodos diseñados 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 método leerá un objeto del tipo pedido.
       Para el método String readLine(), se marca el final de la cadena con n, r, rn o con EOF.
       Para leer un long, por ejemplo:
     long numeroSerie; ... numeroSerie = miDStream.readLong();

                               Streams de entrada de URLs
       Además del acceso a archivos, Java proporciona la posibilidad de acceder a URLs como una
forma de acceder a objetos a través de la red. Se utiliza implícitamente un objeto URL al acceder a
sonidos e imágenes, con el método 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
       También 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];
     is = new URL( getDocumentBase(),datos).openStream();


       Ahora se puede utilizar is para leer información 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 están ordenadas jerárquicamente:
                                                                                                      4/8
Universidad Mariano Galvez, Programación Avanzada




                                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;
    miArchivoSt = new FileOutputStream( "/etc/kk" );

       Como con los streams de entrada, también 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 método write().
Como con el método 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 método
explícito: 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 pequeños, será una
buena idea utilizar un stream de salida con buffer. Los streams con buffer ofrecen los mismos métodos
de la clase FileOutputStream, pero toda salida se almacena en un buffer. Cuando se llena el buffer, se
envía a disco con una única operación de escritura; o, en caso necesario, se puede enviar el buffer a
disco en cualquier momento.
                                                                                                  5/8
Universidad Mariano Galvez, Programación Avanzada

                           Creación de Streams de salida con buffer
       Para crear un stream BufferedOutput, primero se necesita un stream FileOutput normal;
entonces se le añade 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 explícitamente 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 también 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 métodos 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 explícitamente. Siempre se cierra
    // primero el archivo stream de mayor nivel
    miDataStream.close();
    miBufferStream.close();
    miFileStream.close();


                                                                                                 6/8
Universidad Mariano Galvez, Programación Avanzada

                            Escritura en un objeto DataOutputStream
       Cada uno de los métodos write() accesibles por los FileOutputStream también lo son a través de
los DataOutputStream. También encontrará métodos complementarios a los de DataInputStream:
     void   writeBoolean( boolean b );
     void   writeByte( int i );
     void   writeShort( int i );
     void   writeChar( int i );
     void   writeInt( int i );
     void   writeFloat( float f );
     void   writeDouble( double d );
     void   writeBytes( String s );
     void   writeChars( string s );

        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 función necesaria durante la salida es el método size(). Este método simplemente devuelve
el número total de bytes escritos en el archivo. Se puede utilizar size() para ajustar el tamaño de un
archivo a múltiplo de cuatro. Por ejemplo, de la forma siguiente:
      int numBytes = miDataStream.size() % 4;
      for( int i=0; i < numBytes; i++ )
          miDataStream.write( 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 clase RandomAccessFile para este tipo de entrada/salida.

                     Creación 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 sólo lectura (r) o de lectura/escritura (r/w).
Por ejemplo, se puede abrir un archivo de una base de datos para actualización:
RandomAccessFile miRAFile; miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );




                                                                                                      7/8
Universidad Mariano Galvez, Programación Avanzada

                                 Acceso a la Información
        Los objetos RandomAccessFile esperan información de lectura/escritura de la misma manera
que los objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las
clases DataInputStream y DataOutputStream.
        También se tienen muchos métodos para moverse dentro de un archivo: long
getFilePointer();
        Devuelve la posición actual del puntero del archivo: void seek( long pos );

       Coloca el puntero del archivo en una posición determinada. La posición se da como un
desplazamiento en bytes desde el comienzo del archivo. La posición 0 marca el comienzo de ese
archivo: long length();

       Devuelve la longitud del archivo. La posición length() marca el final de ese archivo.




                                                                                                 8/8

Weitere ähnliche Inhalte

Was ist angesagt?

randomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecrandomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecSilvana Vargas
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y SalidaCristian Andres
 
Flujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaFlujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaIngeniería Nica
 
Manejo de archivos en c++
Manejo de archivos en c++Manejo de archivos en c++
Manejo de archivos en c++Whaleejaa Wha
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C wILFAab
 
Capitulo 9
Capitulo 9Capitulo 9
Capitulo 9brenylu
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
capitulo 9 - archivos
capitulo 9 - archivoscapitulo 9 - archivos
capitulo 9 - archivospechan199
 
Estructjohanamoyaa
EstructjohanamoyaaEstructjohanamoyaa
EstructjohanamoyaaJohaMoya31
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE Cleonard1994
 
Open And Reading Files
Open And Reading FilesOpen And Reading Files
Open And Reading Fileskayrambal
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++EdsonRc
 

Was ist angesagt? (20)

randomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ecrandomFiles en www.fiec.espol.edu.ec
randomFiles en www.fiec.espol.edu.ec
 
Tema1oficial
Tema1oficialTema1oficial
Tema1oficial
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y Salida
 
Flujos de Entrada y Salida en Java
Flujos de Entrada y Salida en JavaFlujos de Entrada y Salida en Java
Flujos de Entrada y Salida en Java
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
 
Manejo de archivos en c++
Manejo de archivos en c++Manejo de archivos en c++
Manejo de archivos en c++
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C
 
Capitulo 9
Capitulo 9Capitulo 9
Capitulo 9
 
Progra
PrograProgra
Progra
 
Archivos en C++
Archivos en C++Archivos en C++
Archivos en C++
 
Archivos estructurados
Archivos estructuradosArchivos estructurados
Archivos estructurados
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Ficheros de cabecera
Ficheros de cabecera Ficheros de cabecera
Ficheros de cabecera
 
capitulo 9 - archivos
capitulo 9 - archivoscapitulo 9 - archivos
capitulo 9 - archivos
 
Estructjohanamoyaa
EstructjohanamoyaaEstructjohanamoyaa
Estructjohanamoyaa
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
 
Introduccion a Python. Clase 3
Introduccion a Python. Clase 3Introduccion a Python. Clase 3
Introduccion a Python. Clase 3
 
POO U6 - Ejemplo de archivos de texto en C#
POO U6 - Ejemplo de archivos de texto en C#POO U6 - Ejemplo de archivos de texto en C#
POO U6 - Ejemplo de archivos de texto en C#
 
Open And Reading Files
Open And Reading FilesOpen And Reading Files
Open And Reading Files
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
 

Andere mochten auch

Trabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iiTrabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iirafaelrojas91
 
Java_Capitulo 10
Java_Capitulo 10Java_Capitulo 10
Java_Capitulo 10Espol
 
Java _Capitulo_9
Java _Capitulo_9Java _Capitulo_9
Java _Capitulo_9Espol
 
Aplicaciones java
Aplicaciones javaAplicaciones java
Aplicaciones javaArnel Gomez
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo WebEmilio Aviles Avila
 
Sistemas de ficheros
Sistemas de ficherosSistemas de ficheros
Sistemas de ficherosdaniimc
 
Java_Capitulo_7
Java_Capitulo_7Java_Capitulo_7
Java_Capitulo_7Espol
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSDarwin Durand
 
File reader y filewriter
File reader y filewriterFile reader y filewriter
File reader y filewriterSynysterA7X
 
Java Mapa mental
Java Mapa mentalJava Mapa mental
Java Mapa mentalmarimallol
 
Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Javakunno10
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVAMichelle Torres
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Ronald Cuello
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 

Andere mochten auch (20)

Trabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iiTrabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica ii
 
Java_Capitulo 10
Java_Capitulo 10Java_Capitulo 10
Java_Capitulo 10
 
Java _Capitulo_9
Java _Capitulo_9Java _Capitulo_9
Java _Capitulo_9
 
Aplicaciones java
Aplicaciones javaAplicaciones java
Aplicaciones java
 
Manejo Avanzado de Flujos de Entrada/Salida
Manejo Avanzado de Flujos de Entrada/SalidaManejo Avanzado de Flujos de Entrada/Salida
Manejo Avanzado de Flujos de Entrada/Salida
 
Implementación de Aplicaciones Basadas en Texto
Implementación de Aplicaciones Basadas en TextoImplementación de Aplicaciones Basadas en Texto
Implementación de Aplicaciones Basadas en Texto
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
 
Sistemas de ficheros
Sistemas de ficherosSistemas de ficheros
Sistemas de ficheros
 
Java_Capitulo_7
Java_Capitulo_7Java_Capitulo_7
Java_Capitulo_7
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
File reader y filewriter
File reader y filewriterFile reader y filewriter
File reader y filewriter
 
Java Mapa mental
Java Mapa mentalJava Mapa mental
Java Mapa mental
 
Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Java
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)
 
12 Curso de POO en java - entrada y salida de datos
12 Curso de POO en java - entrada y salida de datos12 Curso de POO en java - entrada y salida de datos
12 Curso de POO en java - entrada y salida de datos
 
4 Curso de POO en java - instalación Eclipse
4 Curso de POO en java - instalación Eclipse4 Curso de POO en java - instalación Eclipse
4 Curso de POO en java - instalación Eclipse
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Java Gestion Eventos
Java Gestion EventosJava Gestion Eventos
Java Gestion Eventos
 
8a Curso de POO en Java - crear proyecto eclipse
8a Curso de POO en Java - crear proyecto eclipse8a Curso de POO en Java - crear proyecto eclipse
8a Curso de POO en Java - crear proyecto eclipse
 

Ähnlich wie Archivos (20)

Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Manejo+de+archivos+en+java
Manejo+de+archivos+en+javaManejo+de+archivos+en+java
Manejo+de+archivos+en+java
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
7 manejo de archivos
7 manejo de archivos7 manejo de archivos
7 manejo de archivos
 
Archivos
ArchivosArchivos
Archivos
 
Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
2-Archivos.ppt
2-Archivos.ppt2-Archivos.ppt
2-Archivos.ppt
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3
 
Archivos de datos en C
Archivos de datos en CArchivos de datos en C
Archivos de datos en C
 
Utilización de la clase math
Utilización de la clase mathUtilización de la clase math
Utilización de la clase math
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Flujos y archivos
Flujos y archivosFlujos y archivos
Flujos y archivos
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Framework .NET 3.5 14 Gestión de archivos y serialización
Framework .NET 3.5 14  Gestión de archivos y serializaciónFramework .NET 3.5 14  Gestión de archivos y serialización
Framework .NET 3.5 14 Gestión de archivos y serialización
 
Lab6-POO
Lab6-POOLab6-POO
Lab6-POO
 
Presentacion java
Presentacion javaPresentacion java
Presentacion java
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientes
 
Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4
 
Archivo de datos
Archivo de datosArchivo de datos
Archivo de datos
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 

Mehr von Whaleejaa Wha (20)

Windows 7
Windows 7Windows 7
Windows 7
 
Windows 7 avanzado
Windows 7 avanzadoWindows 7 avanzado
Windows 7 avanzado
 
Virtualizacion con vm ware
Virtualizacion con vm wareVirtualizacion con vm ware
Virtualizacion con vm ware
 
Unity
UnityUnity
Unity
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Tecnico windows
Tecnico windowsTecnico windows
Tecnico windows
 
Tecnico hardware desde cero
Tecnico hardware desde ceroTecnico hardware desde cero
Tecnico hardware desde cero
 
Soluciones pc desde cero
Soluciones pc desde ceroSoluciones pc desde cero
Soluciones pc desde cero
 
Silverlight
SilverlightSilverlight
Silverlight
 
Servicio tecnico notebooks
Servicio tecnico notebooksServicio tecnico notebooks
Servicio tecnico notebooks
 
Seguridad pc desde cero
Seguridad pc desde ceroSeguridad pc desde cero
Seguridad pc desde cero
 
Seguridad informatica
Seguridad informaticaSeguridad informatica
Seguridad informatica
 
Routers y switches cisco
Routers y switches ciscoRouters y switches cisco
Routers y switches cisco
 
Robotica
RoboticaRobotica
Robotica
 
Redes wireless
Redes wirelessRedes wireless
Redes wireless
 
Redes wifi
Redes wifiRedes wifi
Redes wifi
 
Proteus vsm
Proteus vsmProteus vsm
Proteus vsm
 
Produccion musical
Produccion musicalProduccion musical
Produccion musical
 
Php avanzado
Php avanzadoPhp avanzado
Php avanzado
 
Overclocking
OverclockingOverclocking
Overclocking
 

Archivos

  • 1. Universidad Mariano Galvez Facultad de Ingeniería Programación Avanzada Manejo de Archivos en JAVA Geovin Antonio Morales Martínez 0910-07-13606 La Antigua Guatemala, 04 de agosto de 2007.
  • 2. Universidad Mariano Galvez, Programación Avanzada Manejo de Archivos en JAVA La forma de interactuar con los sistemas de archivos locales se realiza a través de la clase File, esta clase proporciona muchas utilidades relacionadas con archivos y con la obtención de información básica sobre esos archivos. Creación 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. miArchivo = new File( "path","mi_archivo" ); 3. File 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 métodos para reunir información 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() ● Información general del archivo: long lastModified() long length() ● Utilidades de directorio: boolean mkdir() String[] list() Hay muchas clases dedicadas a la obtención de entrada desde un archivo. Este es el esquema de la jerarquía de clases de entrada por archivo: Objetos FileInputStream Los objetos FileInputStream típicamente 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. 2/8
  • 3. Universidad Mariano Galvez, Programación Avanzada 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" ); También 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 método 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 número de bytes leídos 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 número de bytes leídos o -1 si se alcanzó el final del stream. Cierre de FileInputStream Cuando se termina con un archivo, existen dos opciones para cerrarlo: explícitamente, o implícitamente cuando se recicla el objeto (el garbage collector se encarga de ello). Para cerrarlo explícitamente, se utiliza el método 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 métodos 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(); 3/8
  • 4. Universidad Mariano Galvez, Programación Avanzada // Cierra el archivo de datos explícitamente //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 métodos read() de los objetos FileInputStream. No obstante, también se tiene acceso a otros métodos diseñados 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 método leerá un objeto del tipo pedido. Para el método String readLine(), se marca el final de la cadena con n, r, rn o con EOF. Para leer un long, por ejemplo: long numeroSerie; ... numeroSerie = miDStream.readLong(); Streams de entrada de URLs Además del acceso a archivos, Java proporciona la posibilidad de acceder a URLs como una forma de acceder a objetos a través de la red. Se utiliza implícitamente un objeto URL al acceder a sonidos e imágenes, con el método 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 También 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]; is = new URL( getDocumentBase(),datos).openStream(); Ahora se puede utilizar is para leer información 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 están ordenadas jerárquicamente: 4/8
  • 5. Universidad Mariano Galvez, Programación Avanzada 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; miArchivoSt = new FileOutputStream( "/etc/kk" ); Como con los streams de entrada, también 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 método write(). Como con el método 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 método explícito: 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 pequeños, será una buena idea utilizar un stream de salida con buffer. Los streams con buffer ofrecen los mismos métodos de la clase FileOutputStream, pero toda salida se almacena en un buffer. Cuando se llena el buffer, se envía a disco con una única operación de escritura; o, en caso necesario, se puede enviar el buffer a disco en cualquier momento. 5/8
  • 6. Universidad Mariano Galvez, Programación Avanzada Creación de Streams de salida con buffer Para crear un stream BufferedOutput, primero se necesita un stream FileOutput normal; entonces se le añade 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 explícitamente 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 también 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 métodos 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 explícitamente. Siempre se cierra // primero el archivo stream de mayor nivel miDataStream.close(); miBufferStream.close(); miFileStream.close(); 6/8
  • 7. Universidad Mariano Galvez, Programación Avanzada Escritura en un objeto DataOutputStream Cada uno de los métodos write() accesibles por los FileOutputStream también lo son a través de los DataOutputStream. También encontrará métodos complementarios a los de DataInputStream: void writeBoolean( boolean b ); void writeByte( int i ); void writeShort( int i ); void writeChar( int i ); void writeInt( int i ); void writeFloat( float f ); void writeDouble( double d ); void writeBytes( String s ); void writeChars( string s ); 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 función necesaria durante la salida es el método size(). Este método simplemente devuelve el número total de bytes escritos en el archivo. Se puede utilizar size() para ajustar el tamaño de un archivo a múltiplo de cuatro. Por ejemplo, de la forma siguiente: int numBytes = miDataStream.size() % 4; for( int i=0; i < numBytes; i++ ) miDataStream.write( 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 clase RandomAccessFile para este tipo de entrada/salida. Creación 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 sólo lectura (r) o de lectura/escritura (r/w). Por ejemplo, se puede abrir un archivo de una base de datos para actualización: RandomAccessFile miRAFile; miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" ); 7/8
  • 8. Universidad Mariano Galvez, Programación Avanzada Acceso a la Información Los objetos RandomAccessFile esperan información de lectura/escritura de la misma manera que los objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las clases DataInputStream y DataOutputStream. También se tienen muchos métodos para moverse dentro de un archivo: long getFilePointer(); Devuelve la posición actual del puntero del archivo: void seek( long pos ); Coloca el puntero del archivo en una posición determinada. La posición se da como un desplazamiento en bytes desde el comienzo del archivo. La posición 0 marca el comienzo de ese archivo: long length(); Devuelve la longitud del archivo. La posición length() marca el final de ese archivo. 8/8