Vous êtes sur la page 1sur 15

07/01/2019

PhD. Ana María Zambrano V.

El almacenamiento de datos en arreglos es temporal. Para tener


persistencia necesitamos almacenar en archivos.

 Para la E/S salida de datos se emplea las clases de E/S


que se encuentran en el paquete java.io

 Hay dos jerarquías diferentes según el tipo de datos,


éstos pueden ser bytes o caracteres.

 Bytes:
 Lectura(Entrada)InputStream
 Escritura(Salida)OutputStream

PhD. Ana María Zambrano V.

1
07/01/2019

BDD.

PhD. Ana María Zambrano V.

En Java un archivo
es considerado un FLUJO
FLUJO DE SECUENCIAL DE
SECUENCIA DE CARACTERES
BYTES.

Los flujos de
Cada SO provee Java puede leer en
archivos pueden
un marcado de fin forma de datos
utilizar para
de archivo. (EOF) primitivos y
entrada y salida
objetos.
de datos.

PhD. Ana María Zambrano V.

2
07/01/2019

Archivos basados en bytes:

 Archivos creados usando flujos basados en bytes


 Almacenan sus datos en formato binario (Archivos
Binarios) Ej. 5 será almacenado como 000000101

Archivos basados en caracteres :


 Archivos que se basan en caracteres (Archivos de texto).
 El 5 será almacenado como 53 UNICODE.

PhD. Ana María Zambrano V.

System. In
System.out JAVA.IO
System.err

 En un programa se crean automáticamente tres objetos


flujos de bytes:

 Las clases e interfaces que representan los flujos (stream)


están agrupados en el paquete java.io

PhD. Ana María Zambrano V.

3
07/01/2019

Java.io:
BASE A NIVEL DE BYTES

BASE A NIVEL DE CARACTER

Input Output
FileInputStream FileOutputStream
FileReader FileWriter

Heredan de las CLASES ABSTRACTAS:

InputStream (read) OutputStream (write)


Reader (read) Writer (write)
PhD. Ana María Zambrano V.

Java no impone ninguna


Se guardan los
estructura.
registros en orden
El programador define el
(clave).
formato

Consiste en convertir
un objeto en una
secuencia de bytes

Luego lo reconstruye, El objeto serializado es un objeto


con los valores que que representa la secuencia de
tenía. bytes.
PhD. Ana María Zambrano V.

4
07/01/2019

Es una abstracción de todo


Flujo = stream aquello que produzca o consuma
información.

Clases y métodos de I/O que necesitamos


Eficiente:
emplear son independientes del dispositivo.

Para traer información, un programa abre un


Información: stream sobre una fuente (fichero, memoria,
socket) y lee la información.

Para escribir, se abre un stream sobre un


destino.

PhD. Ana María Zambrano V.

Leer Información:

Escribir información:

PhD. Ana María Zambrano V.

5
07/01/2019

Con los
métodos de
la clase File
se obtiene
información
relativa al
archivo o
ruta con que
se ha
inicializado
el objeto

PhD. Ana María Zambrano V.

Define métodos para


Última modificación
conocer (modificar)
Permisos de acceso.
propiedades del
Tamaño…
archivo.

Constructores:

Para conocer la
dirección actual se
puede llamar al
método

public File (URI)


PhD. Ana María Zambrano V.

6
07/01/2019

PhD. Ana María Zambrano V.

PhD. Ana María Zambrano V.

7
07/01/2019

Cree un archivo (datos.txt) en el directorio C que se llame


ficheros.
1. Imprima en pantalla la ruta del fichero creado.
2. Compruebe que el archivo haya sido creado. Si ya ha sido
creado escribir el nombre y el tamaño.
3. En caso de no existir el archivo, cree un nuevo directorio y
cree un nuevo archivo.
4. Si no es posible crear el archivo, recoja mediante excepciones
5. Cambie de nombre el fichero.
6. Realice un filtro cualquier utilizando la clase Filename Filter.

PhD. Ana María Zambrano V.

Las clases FileReader y


FileWriter permiten leer y escribir,
respectivamente, en un fichero.

Lo primero que debemos hacer es


importar estas clases y las que
controlan las excepciones.

PhD. Ana María Zambrano V.

8
07/01/2019

9
07/01/2019

Un filtro sirve para que el método list


devuelva solo aquellos archivos o Un filtro es un objeto de
carpetas que cumplan una una clase que
determinada condición. (que tengan implementa el
una extensión determinada, contengan interface FilenameFilter.
en su nombre una cadena
determinada, empiecen por..., etc)

FilenameFilter tiene un solo método llamado accept que devuelve


un valor de tipo boolean:

El método list llama de forma automática al método


accept para cada uno de los archivos o directorios.
PhD. Ana María Zambrano V.

10
07/01/2019

En un acceso
secuencial de
caracteres sabemos
como vamos
almacenando los datos Entonces como
sabemos que tipo de
dato recoger ???

EN REALIDAD NO
SABREMOS SIEMPRE
COMO SE ALMACENAN
LOS DATOS

LA SOLUCIÓN ES PODER LEER Y ESCRIBIR OBJETOS


PhD. Ana María Zambrano V.

Un objeto serializado Que tiene..


es un objeto que se
representa como una
secuencia de bytes.

Los datos del objeto,


Archivos binarios así como información
(No leidos por texto) acerca del tipo de Una vez que se escribe
objeto y los tipos de un objeto serializado
los datos almacenados en un archivo, se
puede leer de ese
archivo y recrear el
objeto
Un proceso contrario
llamado
deserialización Con..
PhD. Ana María Zambrano V.

11
07/01/2019

Las clases
ObjectInputStream y
ObjectOutputStream,

que
implementan A las interfaces
respectivamente Serializar el
ObjectInput y
objeto.
ObjectOutput

FileInputStream
FileOutStream

PhD. Ana María Zambrano V.

La interfaz Toma un objeto Object que


ObjectOutput implemente la interfaz Serializable
como argumento y escribe su
información a un objeto
Contiene el método
ObjectStream
writeObject

La interfaz
ObjectInput Lee y devuelve una referencia a un
objeto Object de un objeto
InputStream
Contiene el método
readObject

PhD. Ana María Zambrano V.

12
07/01/2019

Para serializar / deserializar es


ObjectOutputStream
necesario implementar la interfaz
ObjectInputStream
Serializable

La interfaz serializable es una


interfaz de marcado. (No contiene
métodos)

Una clase que implementa a Serializable se marca como objeto Serializable


Cada instancia creada debe ser serializable.

PhD. Ana María Zambrano V.

Una clase que implementa a Serializable se marca como objeto Serializable


Cada instancia creada debe ser serializable.

Cualquier variable de instancia que no sea serializable debe ser declarada


como transient.

Para que esta variable sea omitida en el proceso de serialización.

OUTPUT : ESCRIBIR

PhD. Ana María Zambrano V.

13
07/01/2019

INPUT : LEER

CAST

Los datos se deben leer del archivo en el


mismo formato en el que se escribió. Por
lo tanto, utilizamos un objeto Object-
InputStream envuelto alrededor de un
objeto FileInputStream
PhD. Ana María Zambrano V.

Si usamos sólo FileInputStream,


FileOuputStream, FileReader o
FileWriter, cada vez que hagamos una
lectura o escritura, se hará físicamente
en el disco duro.
el proceso se hace costoso y lento

Los BufferedReader,
BufferedInputStream, BufferedWriter y
BufferedOutputStream
añaden un buffer intermedio.

PhD. Ana María Zambrano V.

14
07/01/2019

Para utilizar la serialización/desearialización con los


archivos, inicializamos los objetos ObjectInputStream y
ObjectOutputStream con objetos flujo que pueden leer y
escribir información desde/hacia los archivos.

Objetos de las clases FileInputStream y FileOutputStream,


respectivamente.

Luego empelamos los métodos: writeObject, readObject.

PhD. Ana María Zambrano V.

15

Vous aimerez peut-être aussi