Sei sulla pagina 1di 9

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE SALTILLO

DEPARTAMENTO DE EDUCACIÓN A DISTANCIA


INGENIERÍA EN SISTEMAS COMPUTACIONALES

PROGRAMACIÓN ORIENTADA A OBJETOS


TEMA 6. FLUJOS Y ARCHIVOS

Ensayo lectura obligatoria Unidad 6

Catedrático.
Ing. Jesús Fernando Avilés Hilario

Presenta:
Abril Mejía Rangel
19052155

Saltillo, Coahuila; a 22 de Mayo de 2020.


Archivos
Es un conjunto de datos relacionados entre sí, y organizados en registros. En la
operación y manejo de archivos es posible la ocurrencia de excepciones, sobre
todo las de la clase IOException, las cuales son tratadas como excepciones
marcadas (ó checked).

Los archivos se caracterizan en que los datos almacenados se agrupan en


registros, donde cada registro hace referencia a una entidad particular (cuentas,
personas, productos, etc.).

Clasificación: Archivos secuenciales y archivos aleatorios.


Los archivos se clasifican de acuerdo con la forma en como quedan organizados
sus datos y como quedan almacenados en algún dispositivo.

ARCHIVOS DE ACCESO SECUENCIAL.


Son aquellos cuyos registros guardan un “orden secuencial” a como fueron
grabados, ó sea que habrá un primer registro, luego un segundo registro,
después un tercer registro y así sucesivamente hasta un último registro el cual
antecede a una marca de “Fin de archivo (EOF)”.

Cada registro se divide en “campos” que son los datos que identifican a la
entidad a quien hace referencia el registro, la siguiente figura muestra el
concepto de archivo de acceso secuencial.

El acceso a los registros de estos archivos es en orden a como fueron grabados,


hasta llegar al n-esimo acceso que obtendrá al n-esimo registro, después del n-
esimo registro se llegará a la marca de fin den archivo(EOF, End Of File).

Los archivos secuenciales pueden generarse de dos maneras diferentes:

• Archivos secuenciales tipo texto


son aquellos que después de ser generados pueden ser editados, o sea
que se puede “ver y reconocer” el valor de sus datos, y además son
susceptibles de modificarse los valores a través de un editor.
• Archivos secuenciales binarios
se graban electrónicamente en formato diferente a los archivos
secuenciales de texto, por lo que al editarlos “no pueden ser reconocidos
completamente” el valor de los datos almacenados en el archivo.
ARCHIVOS DE ACCESO ALEATORIO.
se graban con estructura diferente a la de los archivos secuenciales, y no
necesariamente guardan el orden en que son grabados, los registros de estos
archivos se graban con una propia clave de acceso para cada registro, lo cual
facilita el acceso en forma directa a un registro con la clave(llave) especificada.

Muchas veces en algunas aplicaciones no es conveniente el uso de archivos


secuenciales, ya que su forma de accesar los datos no es óptima, sobre todo
cuando son archivos grandes y solo se desea accesar algunos de los registros
del archivo, en estos casos se aconseja el uso de los archivos aleatorios, ya que
estos accesos son más rápidos.

Operaciones básicas y tipos de acceso.


Java incluye librerías con clases especiales para facilitar la operación con
archivos, Java utiliza el término “stream” para indicar el uso de un “flujo de
datos” que pueden ser de entrada (input) al programa, ó pueden ser datos de
salida(output) del programa.

InputStream: flujo de entrada de datos.


OutputStream: flujo de salida de datos.

Un origen de los datos puede ser: otro archivo de datos, un dispositivo de


entrada de datos tal como el teclado de una computadora, un lector de señales,
etc.
Un destino de los datos puede ser: otro archivo de datos, un dispositivo de
salida como un monitor ó pantalla, una impresora, etc.

En Java pueden operar dos tipos de “streams” ó flujos de datos: de byte y de


caracter (character), de tal forma que en los programas se pueden operar
“flujos de datos de entrada a nivel de byte” y tambien “flujos de salida de
datos a nivel de byte”.
Asimismo, los programas se pueden operar “flujos de datos de entrada a nivel
de caracter” y tambien “flujos de salida de datos a nivel de caracter”.

Flujos de acceso Origen (Lectura de datos) Destino (Estructura de


datos)
Flujo a nivel de byte InputStream OutputStream

Flujo a nivel de Reader Writer


caracter
Clases y subclases usadas para la operación de archivos
de datos.
Los archivos de tipo secuencial son los más simples de generar y manipular,
pueden almacenar registros de cualquier longitud, sus registros son colocados
uno junto a otro hasta alcanzar el fin de archivo.

Las operaciones básicas en el tratamiento de archivos tanto secuenciales como


de acceso aleatorio son las siguientes:
• crearlos para detectar su existencia.
• abrirlos para poder acceder a sus datos.
• cerrarlos para después en la siguiente operación poder volver a abrirlos.
• lectura y escritura para poder grabar datos en ellos ó realizar
operaciones de lectura.
• recorrer es leer o escribir cada dato deseado.

Crear.
Esta es la acción de generar un archivo vacío ó sea sin datos, para lo cual Java
proporciona las clases siguientes:

Para los archivos secuenciales tipo texto en escritura/lectura byte por byte
operan las siguientes clases:
Para escribir datos FileOutputStream

Para leer datos FileInputStream

La clase FileOutputStream proporciona los siguientes constructores:

FileOutputStream (String Este constructor abre un flujo hacia el archivo


Nombre) especificado por “nombre”, grabando textos en
el archivo.

FileOutputStream (String Este constructor abre un flujo hacia el archivo


nombre, boolean añadir) especificado por nombre, además de especificar
con “añadir” que los datos nuevos se añadirán al
archivo a partir del ultimo registro en adelante.

FileOutputStream(File Este constructor abre un flujo hacia el archivo


Nombre) pero a partir de un objeto File.
Abrir
La clase FileInputStream tiene los siguientes constructores:

FileInputStream (String nombre) Abre un flujo de entrada desde el


archivo especificado por “nombre”, para
leer textos previamente grabados en el
archivo.
FileInputStream (File nombre- Abre un flujo de entrada desde el
archivo) archivo especificado por un objeto tipo
File que especificado por
“nombre.archivo” .

Cerrar
La operación de cerrar cada archivo abierto en un programa ó aplicación se
realiza mediante la siguiente instrucción:

nombre-archivo.close();

Lectura y escritura
Estas operaciones se muestran en el código de los programas que se han
mostrado en las secciones anteriores.

Recorrer
La operación de recorrer (o hacer el recorrido de ) los registros del archivo tienen
como objetivo el acceso de los registros uno por uno, desde el primero hasta el
último

Archivos secuenciales binarios


Las más de las veces se desea operar archivos cuyos registros estén divididos
en campos ‘o datos, los cuales pueden ser de tipos de datos primitivos como
boolean, byte, int, float, doublé, long, short, etc., para estos casos java nos
proporciona dos interfaces que son:

DataInputStream y DataOutputStream
Los datos que van a ser grabados son transformados a un formato portable
(UTF-8) de código Unicode ligeramente modificado, en el caso contrario, cuando
van a ser leídos también son transformados, pero a la inversa.

DataOutputStream.
El flujo de esta clase permite escribir ó grabar datos de tipo primitivo en cualquier
flujo de salida de datos.

Cuando una aplicación opere datos de salida a grabarse en un archivo primero


enviará esos datos a un filtro de DataOutputStream, el cual estará conectado a
un flujo de salida de datos enmarcado por FileOutputStream, de la siguiente
manera:

FileOutputStream fos = new FileOutputStream(“alumnos.dat”);


DataOutputStream dos = new DataOutputStream(fos);

Para grabar datos se usan los siguientes métodos:


Método Operación que realiza
writeBoolean Escribe ó graba un dato de tipo boolean

writeByte Escribe ó graba un dato de tipo byte

writeBytes Escribe ó graba un dato de tipo String como


secuencia de bytes
writeChar Escribe ó graba un dato de tipo char

writeChars Escribe ó graba un dato String como secuencia


de caracteres
writeShort Escribe ó graba un dato de tipo short

writeInt Escribe ó graba un dato de tipo int

writeLong Escribe ó graba un dato de tipo long

writeFloat Escribe ó graba un dato de tipo float

writeDouble Escribe ó graba un dato de tipo double

writeUTF Escribe ó graba una cadena de caracteres en


formato UTF-8, los dos primeros bytes
especifican el número de bytes de datos
escritos a continuación.
DataInputStream.
El flujo de esta clase permite leer datos de tipo primitivo que estén grabados en
un archivo, cualquier aplicación que opere lectura de datos de estos archivos los
leerá a través de un filtro “dis”, que estará conectado a un flujo “fis” que
representa al archivo en cuestión.

FileInputStream fis = new FileInputStream(“archivo.dat”);


DataInputStream dis = new DataInputStream(fis);

Para la lectura de datos se usan los siguientes métodos.

Método Operación que realiza

readBoolean Lectura de valores de tipo boolean

readByte Lectura de datos de tipo byte

readShort Lectura de datos de tipo short

readChar Lectura de datos de tipo char

readInt Lectura de datos de tipo int

readLong Lectura de datos de tipo long

readFloat Lectura de datos de tipo float

readDouble Lectura de datos de tipo double

readUTF Lectura de una cadena de caracteres en formato


UTF-8, los dos bytes especifican el número de bytes
de caracteres que serán leídos del dato en cuestión.

Archivos secuenciales binarios


Son usados en aplicaciones donde no se busca hacer “recorridos” del archivo,
sino que se desea accesar solo una parte de este, y se desea que el tiempo de
operación sea lo más pequeño posible.

Java contiene la clase RandomAccessFile en el paquete java.io que permite la


creación y manejo de los archivos aleatorios, tambien denominados como de
“acceso directo”.

RandomAccessFile es una subclase directa de la clase Object, e implementa


las interfaces DataInput y DataOutput.
Los archivos aleatorios utilizan el concepto de Key para identificar a cada uno de
los registros que estarán contenidos en el archivo, de manera que para accesar
un registro en particular es necesario conocer el valor de la llave que identifica al
registro deseado, y dándosele al programa éste podrá llegar directamente al
registro sin accesar a los demás.

Constructores de la clase RandomAccessFile.


Constructor Función del constructor

RandomAccessFile (String Genera un flujo direccionado al archivo


nombre-archivo, String modo) que se indica.
RandomAccessFile (File Objeto-File, Genera un flujo direccionado al archivo
String modo) que se indica, pero con un Objeto File.

Modos a operar en archivos aleatorios.


Modo Significado
r read, el acceso será solo de lectura

rw read/write el acceso podrá ser tanto de lectura como se


escritura sobre el archivo.

En la operación de los archivos aleatorios la clase RandomAccessFile utiliza los


siguientes métodos: getFilePointer, length, seek.

• getFilePointer Proporciona la posición actual en bytes del puntero de L/E


en el archivo.
• length Proporciona la longitud del archivo en bytes
• seek Mueve el puntero de L/E a la localización del registro deseado

Manejo de Objetos Persistentes


Los datos a procesar son encapsulados en Objetos, y como tales grabarlos en
archivos de forma que puedan ser usados muchas veces.

Seriación. Acción que en un archivo se graben los datos encapsulados en


objetos
Deseriación. Acción contraria de leer los objetos y reconstruir sus datos a su
forma original como estaban antes de serializarlos.

Para las acciones de “seriación” y “deseriación” el paquete de Java java.io


incluye y facilita las clases ObjectOutputStream y ObjectInputStream, para
generar los flujos correspondientes.

ObjectOutputStream.
Permite grabar datos en archivos como objetos con el método writeObject.
Para la “seriación” de los Objetos se debe implementar la Interface
“Serializable” en la clase que define los objetos con los datos a grabar en el
archivo.
Si no tiene implementada la interface DataOutput (permite implementar) lanzará
una excepción NotSerializableException.

ObjectInputStream.
Permite leer datos como Objetos en archivos con el método readObject. Con la
interface DataInput permite la lectura de tipos de datos, arreglos y datos String.

Potrebbero piacerti anche