Acceso a Datos Java

download Acceso a Datos Java

of 24

Transcript of Acceso a Datos Java

  • 7/27/2019 Acceso a Datos Java

    1/24

    1

    Ficheros

    TEMA 9

    Manuel Pereira GonzlezV1.0

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    2/24

    2

    Introduccin: Conceptos

    Bsicos de Ficheros

    Estructuras de Datos estudiadas:

    Tipos: Arrays, Listas, etc.

    Almacenadas en memoria principal (RAM) Rpida

    Voltil

    Tamao Limitado

    Para tratar grandes volmenes de informacin es

    necesario almacenarla en memoria secundaria(Disco Duro, CD-ROM, Disquete, Disco USB, etc.)

    Los datos agrupados en estructuras denominadasarchivos o ficheros (File en ingls)

    Introduccin: ConceptosBsicos de Ficheros

    Un archivo o fichero es una coleccin de datoshomogneos almacenados en un soporte fsico delcomputador que puede ser permanente o voltil.

    Datos homogneos: Almacena colecciones dedatos del mismo tipo (igual que arrays/vectores)

    Cada elemento almacenado en un fichero sedenomina registro, que se compone decampos.

    Puede ser almacenado en diversos soportes(Disco duro, disquete, )

  • 7/27/2019 Acceso a Datos Java

    3/24

    3

    Introduccin: Conceptos

    Bsicos de Ficheros

    Ejemplos de archivos o ficheros:

    El tamao de un fichero es variable puede crecer segn sevan insertando registros

    Nombre, Apellidos, DNI,Direccin,

    PersonaCenso

    Marca, Color, CocheArchivo de coches

    Ttulo, Autor, ISBN, LibroBiblioteca

    CamposRegistroArchivo

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    4/24

    4

    Introduccin: Operaciones

    sobre Ficheros

    Tipos de operaciones Operacin de Creacin Operacin de Apertura. Varios modos:

    Slo lectura Slo escritura Lectura y Escritura

    Operaciones de lectura/ escritura

    Operaciones de insercin/ borrado Operaciones de renombrado/ eliminacin Operacin de desplazamiento dentro de un

    fichero Operacin de cierre

    Introduccin: Operacionessobre Ficheros

    Operaciones para el manejo habitual de unfichero:

    1.- Crearlo (slo si no existapreviamente)

    2.- Abrirlo

    3.- Operar sobre l (lectura/escritura,insercin, borrado, etc.)

    4.- Cerrarlo

  • 7/27/2019 Acceso a Datos Java

    5/24

    5

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros Tipos de fichero

    Ficheros en Java Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

    Introduccin: Tipos deFichero

    Clasificacin de los ficheros segn la organizacinde los registros en memoria: Organizacin Secuencial: Registros

    almacenados consecutivamente en memoriasegn el orden lgico en que se han idoinsertando.

    Organizacin Directa o Aleatoria: El ordenfsico de almacenamiento en memoria puede nocoincidir con el orden en que han sido insertados.

    Organizacin Indexada. Dos ficheros: Fichero de datos: Informacin Fichero de ndice: Contiene la posicin de cada uno de

    los registros en el fichero de datos

  • 7/27/2019 Acceso a Datos Java

    6/24

    6

    Introduccin: Tipos de

    Fichero

    Clasificacin de los ficheros segn el acceso a la informacinalmacenada: Acceso secuencial: Para acceder a un registro es

    necesario pasar por todos los anteriores. Ej: Cinta deCasete

    Acceso directo o aleatorio: Se puede acceder a unregistro sin pasar por todos los anteriores. Ej: Disco Duro.

    Clasificacin de los ficheros segn el tipo de la informacinalmacenada:

    Ficheros Binarios: Almacenan secuencias de dgitosbinarios (ej: ficheros que almacenan enteros, floats,) Ficheros de Texto: Almacenan caracteres alfanumricos en

    un formato estndar (ASCII, Unicode, UTF8, UTF16, etc.).Pueden ser ledos y/o modificados por aplicacionesdenominadas editores de texto (Ej: Notepad, UltraEdit,Editplus, etc.).

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    7/24

    7

    Conceptos bsicos de

    Entrada/Salida

    Streams: Canales, flujos de datos o tuberas.Entrada (InputStream) o Salida (OutputStream).

    Agrupados en el paquetejava.io

    Dos jerarquas de clases independientes, una paralectura/escritura binaria (bytes) y otra paralectura/escritura de caracteres de texto (char)

    Conceptos bsicos deEntrada/Salida

    Streams de caracteres Streams de bytes

  • 7/27/2019 Acceso a Datos Java

    8/24

    8

    Conceptos bsicos de

    Entrada/Salida

    Mtodos bsicos de Reader:

    int read()

    int read(char cbuf[])

    int read(char cbuf[], int offset, int length)

    Mtodos bsicos de InputStream:

    int read()

    int read(byte cbuf[])

    int read(byte cbuf[], int offset, int length)

    Conceptos bsicos deEntrada/Salida

    Mtodos bsicos de Writer:

    int write(int c)

    int write(char cbuf[])

    int write(char cbuf[], int offset, int length) Mtodos bsicos de OutputStream:

    int write(int c)

    int write(byte cbuf[])

    int write(byte cbuf[], int offset, int length)

    Los Streams se abren automticamente al crearlos,pero es necesario cerrarlos explcitamente llamandoal mtodo close() cuando se dejan de usar

  • 7/27/2019 Acceso a Datos Java

    9/24

    9

    Conceptos bsicos de

    Entrada/Salida

    PrintStream / PrintWriter se utilizan para escribircadenas de texto.

    DataInputStream / DataOutputStream se utilizanpara escribir/leer tipos bsicos (int, long, float,).

    Acceso a ficheros: Segn el acceso:

    Acceso Secuencial: El ms comn. Puede ser: Acceso binario: FileInputStream / FileOutputStream

    Acceso a caracteres (texto): FileReader / FileWriter

    Acceso Aleatorio: Se utiliza la claseRandomAccessFile

    Conceptos bsicos deEntrada/Salida

    La clase File puede usarse para representarel nombre de un archivo concreto, o losnombres de los archivos de un directorio.

    Para crear/abrir un fichero en Java se invocaa un constructor de la clase File.

  • 7/27/2019 Acceso a Datos Java

    10/24

    10

    Conceptos bsicos de

    Entrada/Salida

    Conceptos bsicos deEntrada/Salida

  • 7/27/2019 Acceso a Datos Java

    11/24

    11

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros Tipos de fichero

    Ficheros en Java Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

    Ficheros Binarios

    Leer/Escribirbytes en ficheros

    Streams de

    Entrada/Salida:FileInputStream/FileOutputStream

  • 7/27/2019 Acceso a Datos Java

    12/24

    12

    Ficheros Binarios

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    13/24

    13

    Ficheros de Tipos Primitivos

    Leer/Escribir datosde tiposprimitivos: int,long, float, etc.

    Streams deEntrada/Salida:DataInputStream/

    DataOutputStream

    Ficheros de Tipos Primitivos

  • 7/27/2019 Acceso a Datos Java

    14/24

    14

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros Tipos de fichero

    Ficheros en Java Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

    Ficheros de Texto

    Escribir / Leer cadenas de texto Se utilizan las clases Reader / Writer PrintWriter: Hereda de Writer, permite escribir texto

    en un OutputStream En el constructor recibe el OutputStream a utilizar Tiene mtodos para escribir en forma de texto todos los

    tipos bsicos y los Strings. Mtodos duplicados para insertar retorno de carro al

    final del dato escrito (print / println)

    PrintStream es similar a PrintWriter, pero susmtodos estn deprecados (la clase no, porquetodava se usa en System.out) -> Por defectoutilizar PrintWriter que es ms moderna.

  • 7/27/2019 Acceso a Datos Java

    15/24

    15

    Ficheros de Texto

    Ficheros de Texto

  • 7/27/2019 Acceso a Datos Java

    16/24

    16

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros Tipos de fichero

    Ficheros en Java Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

    Ficheros de AccesoAleatorio

    Se utiliza la clase RandomAccessFile

    No est basada en el concepto de flujos o Streams.

    No deriva de InputStream/OutputStream niReader/Writer

    Permite leer y escribir sobre el fichero, no es necesariodos clases diferentes

    Necesario especificar el modo de acceso al construir unobjeto de esta clase: slo lectura o lectura/escritura

    Dispone de mtodos especficos de desplazamientocomo seek(long posicion) o skipBytes(int desplazamiento)para poder moverse de un registro a otro del fichero, oposicionarse directamente en una posicin concreta delfichero.

  • 7/27/2019 Acceso a Datos Java

    17/24

    17

    Ficheros de Acceso

    Aleatorio

    Constructores:

    RandomAccessFile(File f, String modoAcceso)

    RandomAccessFile(String nombreArchivo, String modoAcceso)

    modoAcceso puede ser: r (slo lectura) o rw (lectura yescritura).

    Mtodos:

    void seek(long posicion): Sita el puntero de lectura/escritura enla posicin indicada, desde el principio del fichero.

    long getFilePointer(): Devuelve la posicin actual del puntero delectura/escritura.

    int skipBytes(int desplazamiento): Desplaza el puntero desde laposicin actual, el nmero de bytes indicado por desplazamiento

    long length(): Devuelve la longitud o tamao del fichero en bytes

    Ficheros de AccesoAleatorio

  • 7/27/2019 Acceso a Datos Java

    18/24

    18

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros Tipos de fichero

    Ficheros en Java Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

    Serializacin

    Serializacin: Posibilidad de escribir/leer Objetosjava en Streams.

    Para poder serializar un objeto en java deben

    cumplirse los siguientes requisitos: Debe implementar la interfaz Serializable (se

    estudiarn las interfaces con ms detenimientoen el siguiente tema).

    Todos los objetos incluidos en l tienen queimplementar la interfaz Serializable

    Para escribir/leer objetos serializables a un Streamse utilizan las clases java ObjectInputStream/ObjectOutputStream.

  • 7/27/2019 Acceso a Datos Java

    19/24

    19

    Serializacin

    Serializacin

  • 7/27/2019 Acceso a Datos Java

    20/24

    20

    Serializacin

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    21/24

    21

    Algoritmos sobre ficheros

    Algoritmos de ordenacin estudiados hastaahora lo hacen en memoria.

    Si existe gran cantidad de datos, no sepueden tener todos a la vez en memoria.

    Entonces es necesario almacenar y ordenarlos datos utilizando ficheros.

    Dos algoritmos para ordenar utilizandoficheros:

    Algoritmo de mezcla directa

    Algoritmo de mezcla natural

    Algoritmos sobre ficheros:Mezcla Directa

    Algoritmo de Mecla Directa: Dividir una secuencia inicial de datos en dos subcadenas y

    mezclar elemento a elemento de forma ordenada. El proceso se repite hasta que la secuencia inicial queda

    totalmente ordenada.

    Pasos: 1) Se divide la secuencia inicial de datos del fichero a en

    dos mitades b y c 2) Se mezclan b y c combinando elementos aislados para

    formar pares ordenados 3) La secuencia resultante se almacena en el fichero a y se

    repiten los pasos 1) y 2) para formar cudruplosordenados.

    4) Se repiten los pasos anteriores para formar octetosordenados, y as sucesivamente.

  • 7/27/2019 Acceso a Datos Java

    22/24

    22

    Algoritmos sobre ficheros:

    Mezcla Directa

    Ejemplo de MeclaDirecta:

    Las comillas simples ()indican fin de tupla.

    Algoritmos sobre ficheros:Mezcla Natural

    Algoritmo de Mecla Natural: Se quiere ordenar el fichero c Se realizan sucesivas distribuciones y mezclas del

    fichero c en los ficheros a y b hasta lograr ordenar los

    datos. La distribucin consiste en repartir la secuencia original

    en dos secuencias, de forma que se pasanalternativamente secuencias ordenadas (o tramos)de longitud mxima del fichero c a los ficheros a y b.

    La mezcla consiste en tomar una subsecuencia de a y otrade b y ordenarlas internamente para formar una slasubsecuencia ordenada, y as con todos los pares desubsecuencias (una de a y otra de b). Si a y b tienendistinto nmero de subsecuencias, las restantes se aadental cual al fichero c sin mezclar.

  • 7/27/2019 Acceso a Datos Java

    23/24

    23

    Algoritmos sobre ficheros:

    Mezcla Natural

    Ejemplo de Mecla Natural:

    Las comillas simples () indican fin de tupla.

    Agenda

    Introduccin Conceptos Bsicos de Ficheros Operaciones sobre ficheros

    Tipos de fichero Ficheros en Java

    Conceptos Bsicos de Entrada/Salida Ficheros Binarios Ficheros de Tipos Primitivos Ficheros de Texto Ficheros de Acceso Aleatorio Serializacin

    Algoritmos sobre Ficheros Resumen

  • 7/27/2019 Acceso a Datos Java

    24/24

    Resumen: Para ms

    informacin

    http://java.sun.com/docs/books/tutorial/essential/io/index.html

    http://elvex.ugr.es/decsai/java/pdf/C1-files.pdf

    http://home.cogeco.ca/~ve3ll/jatutor8.htm http://www.inf-

    cr.uclm.es/www/cmunoz/mytp/ficheros.pdf http://x500.cica.es/formacion/JavaTut/Cap8

    /fichero.html