manejo avanzado de flujos de entrada/salida
TRANSCRIPT
Manejo avanzado de streams Manejo avanzado de streams de estrada/salidade estrada/salida
Ing. Rolando Steep Quezada MartínezIng. Rolando Steep Quezada Martínez
[email protected]@upnorte.edu.pe
Programación Avanzada en JavaProgramación Avanzada en Java
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-22
La clase FileLa clase File
• Una instancia de la clase File es representación abstracta de una ruta de acceso para un archivo o un directorio, proporciona información acerca de los archivos, de sus atributos, de los directorios, etc.
• Que exista un objeto de tipo File no implica que exista el archivo (o directorio) correspondiente en el sistema de archivos.
• Constructores
public File(String pathname)
public File(String parent, String child)
public File(File parent, String child)
public File(URI uri)
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-44
Listar los archivos de un directorioListar los archivos de un directorio
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-66
Obtener información de un archivoObtener información de un archivo
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-77
Los streams (flujos)Los streams (flujos)
• Java define la entrada/salida en términos de streams.• Un stream es una secuencia ordenada de datos.• Los streams pueden ser leidos (reads) desde una fuente o escritos
(writes) hacia un destino• Los streams están definidos en el paquete java.io
• Java define dos tipos de streams:– Byte streams : Flujo de datos binarios en formato de 1 byte– Character streams : Flujo de caracteres unicode de 2 bytes
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-99
Clases orientadas a flujo de bytes de Clases orientadas a flujo de bytes de entradaentrada
Clases que representan origen :
•FileInputStream
•ByteArrayInputStream
•PipedInputStream
Clases que añaden características a un origen:
•ObjectInputStream
•SequenceInputStream
•FilterInputStream
•BufferedInputStream
•DataInputStream
•PushbackInputStream
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1010
Clases orientadas a flujo de bytes de Clases orientadas a flujo de bytes de salidasalida
Clases que representan destino :
•FileOutputStream
•ByteArrayOutputStream
•PipedOutputStream
Clases que añaden características a un destino:
•ObjectOuotputStream
•FilterOutputStream
•BufferedOutputStream
•DataOutputStream
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1111
Clases orientadas a flujo de caracteres Clases orientadas a flujo de caracteres de entradade entrada
Clases que representan origen :
•CharArrayReader
•FileReader
•PipedReader
•StringReader
Clases que añaden características a un origen:
•BufferedReader
•FilterReader
•InputStreamReader
•LineNumberReader
•PushbackReader
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1212
Clases orientadas a flujo de caracteres Clases orientadas a flujo de caracteres de salidade salida
Clases que representan destino :
•CharArrayWriter
•FileWriter
•PipedWriter
•StringWriter
Clases que añaden características a un destino:
•BufferedWriter
•PrintWriter
•OutputStreamWriter
•FilterWriter
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1313
Flujos sobre archivos binariosFlujos sobre archivos binarios
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1414
Patrón Decorador en el paquete Patrón Decorador en el paquete java.iojava.io
Este patrón permite añadir de modo dinámico nuevas funciones a objetosindividuales (no a clases completas). En vez de usar la herencia tradicional, este patrónencapsula un objeto dentro de un objeto decorador, que se encarga de proporcionar lasnuevas funciones.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1515
Flujos filtrados de escrituraFlujos filtrados de escritura
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1616
Flujos filtrados de lecturaFlujos filtrados de lectura
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1717
SerializacionSerializacion
• Existen dos streams que permiten serializar y deserializar un objeto.
– Serializar significa transformar un objeto en una secuencia de bytes para escribirlo en un stream.
– Deserializar significa transformar una secuencia de bytes leída de un stream en un objeto.
• Esta posibilidad es muy útil para:
– Persistir objetos (instancias).– Transmitir objetos (instancias).
• Son ObjectInputStream y ObjectOutputStream.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-1818
Acceso aleatorio a archivosAcceso aleatorio a archivos
• La clase RandomAccessFile permite accesar archivos en forma directa. Esta clase permite ver un archivo como un arreglo de caracteres y leer o escribir zonas del arreglo. Como lo indica la siguiente figura, cada carácter se subindica mediante un índice.
• Mediante los objetos de esta clase utilizamos ficheros binarios mediante un acceso aleatorio, tanto para lectura como para escritura. En estos ficheros hay un índice que nos dice en qué posición del fichero nos encontramos, y con el que se puede trabajar para posicionarse en el fichero.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-2020
ResumenResumen
• La clase File permite obtener información de un archivo o un directorio.
• Java trata la información como flujos, ya sea de entrada o de salida
• Existen dos jerarquías que definen la base para entrada/salida tanto de caracteres como de bytes
• En la entrada/salida de java se aplica el patrón Decorator al usar Flujos Filtrados.
• La serialización permite el almacenamiento y recuperación de Objetos que implementen la interface Serializable.
• La clase RandomAccessFile permite acceso aleatorio a un archivo, pudiéndose desplazar de manera no secuencial.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez 15-15-2121
Práctica 15Práctica 15
Objetivos
– Poder manipular la estructura de archivos del entorno operativo.
– Implementar aplicaciones que hagan uso de recursos externos por medio de mecanismos de entrada/salida.
– Implementar Persistencia de datos mediante la Serialización.