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