Anda di halaman 1dari 10

Archivos, Flujos,

Entrada y Salida
Unidad 13

Introduccin
La mayora de la entrada salida desde y hacia la
mquina virtual est basada en flujos (streams)
Independientemente de que el programa se est comunicando con
la consola, archivos u otro programa ejecutndose en la red

La mayora de las lecturas y escrituras desde y


hacia flujos es secuencial
La clase RandomAccessFile provee una alternativa a lecturas y
escrituras secuenciales
Las clases en el paquete java.io proveen el soporte necesario para
operaciones I/O
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Acceso a datos
Java provee varias clases para leer y escribir
datos desde y hacia un programa.
El acceso a los datos en archivos puede realizarse
en forma secuencial o en forma aleatoria
Para almacenar y leer datos en forma aleatoria se utiliza
la clase RandomAccessFile
Para almacenar y leer datos en forma secuencial se
utilizan objetos de software conocidos como flujos

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Trabajando con archivos


Los datos procesados por programas se encuentran en
memoria
Dejan de ser accesibles una vez que el programa termina su ejecucin

Actividades de salida (output) representan la escritura de


datos desde un programa y hacia un proceso o
dispositivo externo
Para hacer los datos persistentes ms all de la ejecucin de un
programa, los mismos pueden ser almacenados en archivos.

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Clase archivo (File)


La clase File provee informacin acerca de un archivo o
directorio del sistema de archivos nativo.
Objetos File pueden leer contenido del sistema de archivos de bajo
nivel (o directorio de archivos)
NO pueden acceder al contenido de un archivo
Slo provee funcionalidad para navegar por el sistema de archivos y
acceder a propiedades o informacin sobre un archivo

Generalmente, se crea un objeto File para manipular informacin


acerca de un archivo y luego se verifica su existencia antes de
leer o escribir datos

Un objeto File es inmutable *


El objeto File slo puede apuntar al archivo referenciado en el
constructor
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Clase archivo (File)


Al trabajar con archivos:
es importante verificar la existencia de un objeto
archivo antes de la creacin de un flujo
Mtodos de la clase File: getName( ), getParent( ), getAbsolutePath( ),
canWrite( ), canRead( ), exists( ), isDirectory( ), listFiles( ), etc.

Ej.: mtodo listFiles() para recuperar una lista de objetos archivo.


El arreglo devuelto puede ser utilizado para obtener los nombres de
los archivos

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Ej. Mostrando informacin de


archivos
File nuevoArchivo = new File("c:\\archivoEjemplo.txt");
if (nuevoArchivo.exists())
{
System.out.println(Nombre archivo: " +
nuevoArchivo.getName());
System.out.println(Archivo padre: " +
nuevoArchivo.getParent());
System.out.println(Tamao archivo: " +
nuevoArchivo.length());
System.out.println(ltima modificacin: " +
nuevoArchivo.lastModified());
}
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Actividad de Laboratorio 13.1.1


Mostrando Informacin
estadstica de Archivos

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Flujos
Java provee flujos orientados a byte
Adecuados para conjuntos de caracteres ASCII

Flujos orientados a caracter


Convierten caracteres del SO nativo a UNICODE

Ambos tipos de flujos pueden ser flujos de bajo nivel


Directamente conectados a dispositivos de entrada o salida

Flujos de alto nivel pueden filtrar datos y/o almacenarlos


en buffer
Deben ser conectados a flujos de bajo nivel
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Jerarqua de clases I/O

Flujos de bytes poseen


clases InputStream y
OutputStream como
raz de la jerarqua

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Jerarqua de Clases I/O

Flujos de caracteres
poseen clases Reader y
Writer como raz de la
jerarqua.

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Flujos ((cont.)
cont.)
Las operaciones de entrada salida son ejecutadas construyendo flujos
conectados
Utilizando objetos de flujos de alto nivel y flujos de bajo nivel
FilterInputStream

Ej:

FileInputStream BufferedInputStream DataInputStream


(bajo nivel)

(alto nivel)

(alto nivel)

Los mtodos de flujos de alto nivel son utilizados para filtrar y


formatear la lectura o escritura de datos.
El mtodo close() del flujo de alto nivel cierra todos los flujos
conectados
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Flujos de bajo nivel y flujos de


alto nivel
Tanto en flujos de caracteres como en flujos de bytes, la
lectura y escritura de datos de bajo nivel se realiza a travs
de bytes
Cada invocacin de un mtodo read() en una clase Reader
cualquiera causa que uno o ms bytes sean ledos desde el flujo de
entrada de bajo nivel
Para posibilitar la conversin eficiente de bytes a caracteres, un
conjunto de bytes es ledo cada vez para satisfacer la operacin de
lectura corriente.
Por cuestiones de eficiencia, siempre debe considerarse el
encapsulamiento de un InputStreamReader dentro de un
BufferedReader
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new FileReader(Archivo.dat));

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Acceso aleatorio a datos


En la mayora de las aplicaciones de negocio, la
persistencia de datos es realizada a travs de una BD
relacional
acceso aleatorio a los datos es provisto a travs del SGBD
Cdigo Java se utiliza para someter sentencias
SQL a la BD y recuperar datos desde la BD
la funcionalidad de acceso aleatorio es provista por el software de
BD

Clase RandomAccessFile
clase Java que provee acceso aleatorio a datos
almacenados en archivos
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Acceso aleatorio
La clase RandomAccessFile es utilizada para leer y escribir
informacin en posiciones arbitrarias dentro de un archivo.
Sin tener que leer o escribir informacin en posiciones
precedentes.

A travs de un objeto RandomAccessFile, el programador


puede utilizar:
- mtodos de ubicacin (seek) para encontrar una posicin
especfica en un archivo
- mtodos de lectura para leer a partir de una posicin determinada
- mtodos de escritura para escribir a partir de una posicin
determinada

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Ej. Acceso aleatorio


OutputStream ostream;
int c;
int position;
RandomAccessFile inFile =new RandomAccessFile("c:\\ejemplo.txt","r");
ostream = System.out;
position = Console.readInt(Ingrese una posicin:");
try {
inFile.seek(position);
while((c = inFile.read()) != -1){
ostream.write(c);}
}
catch(IOException e) {
System.out.println("Error: " + e.getMessage());
}
finally { inFile.close();
ostream.close();}

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Serializacin
Java permite leer y escribir objetos como un todo
utilizando serializacin de objetos.
Objetos son escritos y ledos utilizando objetos ObjectInputStream y
ObjectOutputStream

Slo objetos que implementan la interfase Serializable


pueden ser serializados
La interfase Serializable no es implementada en la clase Object

La palabra clave transient puede ser aplicada para excluir


objetos o datos de la serializacin
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Almacenando objetos en un
archivo
Durante el proceso de serializacin de objetos, no
son serializados:
Datos estticos
pertenecen a la clase, no a un objeto en particular

Mtodos
Atributos definidos como transientes
Todo objeto referenciado por el objeto siendo serializado
que no haya sido definido como implementando la
interfase Serializable

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Ej.: Almacenando objetos en


un archivo
FileOutputStream fileOutputStream;
ObjectOutputStream objectOutputStream;
File objectFile;
Object[] clientes ...
objectFile = new File("clientes.dat");
try
{
fileOutputStream = new FileOutputStream(objectFile);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
for (int i=0; i < clientes.length; i++)
{
objectOutputStream.writeObject(clientes[i]);
}
Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

Ej.: Almacenando objetos en


un archivo ((cont.)
cont.)
objectOutputStream.flush();
objectOutputStream.close();
fileOutputStream.close();
}
catch (IOException ioe)
{
System.out.println(ioe.getMessage());
}

Academia Local Cisco UTN Facultad Regional Santa Fe http://www.santafecna.org.ar

10

Anda mungkin juga menyukai