Aprendizaje activo: flujos



Documentos relacionados
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Operación de Microsoft Word

Ejercicios - Persistencia en Android: ficheros y SQLite

Modulo 1 El lenguaje Java

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Ejemplo de lectura por teclado de un número entero: int n; System.out.print("Introduzca un número entero: "); n = sc.nextint();

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Creación un instalador con Visual Studio.NET. Irene Sobrón. Ingeniero de Telecomunicaciones por la Escuela Técnica Superior de Bilbao

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Combinar comentarios y cambios de varios documentos en un documento

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

7. Manejo de Archivos en C.

Capítulo 1 Documentos HTML5

Programación Orientada a Objetos con Java

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Programación Orientada a Objetos. Tema 7: Persistencia

Árboles binarios de búsqueda

Pruebas de unidad con JUnit

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Práctica 2: Simón dice

Creación y administración de grupos de dominio

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Contenidos. Archivos en C++ Archivos en C++ Introducción

FACULTAD DE INGENIERÍA

Tareas básicas en OneNote 2010 Corresponde a: Microsoft Office OneNote 2010

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Uso de archivos en C++

Introducción a los sitios de SharePoint en Office 365

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

MODULO DE PROGRAMACION JAVA Nivel Básico-Intermedio

Manual de Usuario del Sistema RECIBOS DE HABERES UNLu Contacto:

Operación Microsoft PowerPoint 97

19. Packages o paquetes

Manual de usuario de Parda Programa de Almacenamiento y Recuperación de Datos Automático

Backup & Recovery Oracle 9i. Las copias físicas offline, conocidas como Backups en frío, se realizan cuando la Base de Datos está parada.

Microsoft Access proporciona dos métodos para crear una Base de datos.

Descarga, instalación y uso de herramientas:

Tutorial: Primeros Pasos con Subversion

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PowerPoint 2010 Modificar el diseño de las diapositivas

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS

Excepciones y E/S Java y Servicios Web I Master en Ingeniería Matemática

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

AGRUPA P R OBJET E OS 1

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

1.00 Clase 8. Datos y métodos estáticos. Datos y métodos estáticos de las clases. Campos de datos estáticos:

Práctica III: Streams, Readers y Writers

Accede a su DISCO Virtual del mismo modo como lo Hace a su disco duro, a través de:

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Guía del usuario. Centro de facturación de UPS

GUÍA DE OUTLOOK. Febrero 2010

COMPROBACIONES BÁSICAS PARA EL USO DE FIRMA EN EL RTC

Distribuidor de documentos 1. Ventajas. Distribuidor de documentos

Proyecto de Facturación con Filemaker Pro 12

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Primer Parcial Septiembre 5 de 2009

Generador de Proxy remoto JavaScript.

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences

TUTORIAL PRÁCTICO DE BASES DE DATOS EN ACCESS CREAR UNA AGENDA

Manual CMS Mobincube

ESTÁNDAR DESEMPEÑO BÁSICO Recopila información, la organiza y la procesa de forma adecuada, utilizando herramientas tecnológicas.

Con esta nueva versión, si un artículo que está incluido dentro de un Paquete de Ventas tiene precio 0,00, significará gratis.

API de java. ( Guía de alumno Laboratorio 9. Recursos disponibles en moodle para este día.

Móvil Seguro. Guía de Usuario Terminales Android

GENERACIÓN DE ANTICIPOS DE CRÉDITO

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

Tema 1. Introducción a JAVA

Creación de Funciones de Conducción

Entrada y Salida con Java

COMISIÓN NACIONAL PARA EL AHORRO DE ENERGÍA

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Práctica 4: Herencia. Objetivos:

GENERACIÓN DE TRANSFERENCIAS

CURSO: GESTIÓN TERRITORIAL DE LA INFORMACIÓN CATASTRAL Y ADMINISTRACIÓN ELECTRÓNICA. Supuestos Prácticos: Alteración catastral (10/07/2012)

Oracle 12c DISEÑO Y PROGRAMACIÓN

Escudo Movistar Guía Rápida de Instalación Dispositivos Symbian

Práctica: Compartición y seguridad de los recursos de red

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

MANUAL WINDOWS MOVIE MAKER. Concurso de Gipuzkoa

USO DEL COMANDO. Fdisk. Autor :. Alejandro Curquejo. Recopilación :. Agustí Guiu i Ribera. Versión :.. 1.0

Prof. Dr. Paul Bustamante

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

SOLUCION EXAMEN junio 2006

INSTALACIÓN DE MEDPRO

Practica 11: Conexión de Java con Bases de datos Access

Microsoft OneNote 2010

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

Programación páginas web. Servidor (PHP)

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

Uso de excepciones en Java

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

Tablas y Campos Nuevos

Transcripción:

Clase 29 Aprendizaje activo: flujos La aplicación Logger 2 1

Objetivos En el marco de trabajo de la aplicación Logger, analizaremos tres formas de leer y escribir datos utilizando flujos de Java: 1. como texto 2. como datos binarios 3. como objetos serializados Aprenderemos a utilizar la clase incorporada LinkedList de Java y su clase de ayuda ListIterator para mantener el registro. 3 Arquitectura de Logger Logger.java: proporciona el método main() y la GUI genera datos de registro ("Log") como objetosdate resume y realiza comprobaciones mínimas de validez ("Summarize"); selecciona archivos para lectura y escritura utilizando un JFileChooser llama a métodos enloggerio para leer y escribir datos Como estudiante, escribirá esos métodos. 4 2

java.util.linkedlist java.util.linkedlist posee los mismos métodos que nuestra SlinkedList, y muchos más. Logger utiliza una LinkedList para contener los datos del registro y los pasa a los métodos LoggerIO que tendrá que escribir. Por ejemplo: void savetotext( List list, File f ) 5 Iteradores Un iterador es una clase de ayuda diseñada para utilizarse con una lista o con una clase de colección. Incluye métodos para devolver los miembros de la colección de uno en uno. Los iteradores también implementan métodos que permiten modificar la colección con relación a la posición actual del iterador. 6 3

Interfaz ListIterator public interface ListIterator { public boolean hasnext(); public Object next() throws NoSuchElementException; public boolean hasprevious(); public Object previous() throws NoSuchElementException; public void remove() throws IllegalStateException; public void add( Object o ); public void set( Object o ) throws IllegalStateException.... 7} Métodos Iterator Los iteradores de Java devuelven un nuevo elemento y avanzan hasta el siguiente con la misma operación next(). ElListIterator de Java también permite ir hacia atrás ( hasprevious() y previous() ). El elemento más reciente devuelto por next() es el elemento actual. remove() eliminará el elemento actual de la colección subyacente. set() lo modificará. add() insertará un nuevo elemento después del actual y antes del elemento que desee que se devuelva en la siguiente llamada a next(). Tras una llamada aadd(), el elemento insertado se convierte en el actual. Una llamada a next() devolverá el elemento después del insertado. La primera llamada anext() debería devolver el primer elemento de la lista. 8 4

Cómo utilizar un iterador List mylist = new LinkedList();... ListIterator iter = mylist.listiterator();... while ( iter.hasnext() ) { Object o = iter.next();... } 9 E/S tradicional El enfoque tradicional utiliza distintos esquemas según el tipo de origen o destino, p.ej., entrada de teclado salida de pantalla archivos conductos de interproceso sockets de red 10 5

E/S de Java El enfoque preferido de Java es tratar los datos de entrada y de salida utilizando flujos (C++ fue el pionero) Java ofrece un conjunto de clases de flujos abstractos que definen las interfaces del flujo una jerarquía de implementaciones de flujo Java le permite tratar algunos datos de entrada y salida de forma distinta, p.ej. RandomAccessFile 11 Flujos de entrada y de salida Los flujos son unidireccionales Un flujo de entrada controla los datos que entran en el programa y provienen de algún origen Un flujo de salida controla los datos que salen del programa hacia algún destino Si quiere leer y escribir el mismo destino, utilice 2 flujos 12 6

Flujos y canales E/S Normalmente, el otro extremo de un flujo conduce a o surge desde un servicio de medios de una plataforma específica, por ejemplo, un sistema de archivos Sistema de archivos Flujo de entrada Programa Flujo de salida Sistema de archivos 13 Qué comparten los flujos Los flujos de Java son colas FIFO Los flujos entregan información en el orden en que se insertó en el canal subyacente Los flujos estándar de Java sólo ofrecen acceso secuencial y no acceso de retroceso, de copia de seguridad ni aleatorio 14 7

Flujos de acoplamiento Los flujos de Java pueden combinarse utilizando un flujo como argumento constructor del otro Esto se suele hacer para agregar funcionalidad y para convertir los datos Los conductos de flujos se construyen desde el origen de datos hacia el programa o desde el destino de datos de vuelta hacia el programa 15 Conducto de flujo, I Flujo entrada archivo Lector flujo entrada Lector con búfer Señalizador flujo 16 8

Conducto de flujo, II UnFileInputStream lee bytes desde un archivo UnInputStreamReader convierte un flujo de entrada en caracteres UnBufferedReader almacena un flujo de caracteres en el búfer para una mayor eficacia UnStreamTokenizer analiza un flujo de caracteres en testigos 17 Construcción del conducto FileInputStream f = new FileInputStream( path ); InputStreamReader i = new InputStreamReader( f ); BufferedReader b = new BufferedReader( i ); StreamTokenizer t = new StreamTokenizer( b ); 18 9

Ejercicio delogger Descargue los dos archivos Logger.java y LoggerIO.java del sitio web de clase (enlaces de la clase 29). Guárdelos en un nuevo directorio. Cree un nuevo proyecto y monte el directorio en el que acaba de guardar los dos archivos java. No inserte declaraciones de paquetes. Déjelos en el paquete predeterminado. Compile el proyecto y pruébelo. Intente guardarlo en un nuevo archivo en modo de texto. Se ha creado un archivo? Contiene algo? (Ábralo con el Bloc de notas). 19 savetotext() Ya le hemos facilitado casi todo el método savetotext(); ésta es la idea del patrón: Los bloques try/catch Cómo construir el flujo, en este caso un FileWriter Cómo iterar descendentemente la lista Cómo cerrar el flujo cuando hemos terminado (al cerrar el flujo se guarda el archivo) Busque el método enfilewriter para escribir la cadena de fecha y utilícela para obtenernstring a la salida enwriter. Pruébelo. Vea lo que ha escrito en el Bloc de notas. 20 10

loadfromtext(), 1 Ahora continuaremos con el método loadfromtext(). De nuevo, observe el patrón: Construir un BufferedReader desde un FileReader; necesitaremos un BufferedReader para leer las líneas de texto de una en una; Analice la condición while; leeremos la siguiente línea y comprobaremos el EOF en una sentencia. Muchos métodos de lectura de flujos de entrada devuelven un valor especial al llegar al final del archivo. Comprender por qué utilizamos bloques try/catch anidados y varias cláusulas catch. Escriba una línea de código para convertir una línea de texto en una fecha utilizando Date parse( String s ) throws ParseException 21 loadfromtext(), 2 Escriba una segunda línea de código para agregardate a la lista que devuelve el método. Borre la línea (sólo sirve para proporcionar una excepción artificial antes de escribir el verdadero código): if ( false ) throw new ParseException("",0); Pruebe el código. Escriba los datos de salida, borre el registro y compruebe si puede volver a cargarlo en modo de texto. Utilice el Bloc de notas para escribir a mano una nueva entrada de registro utilizando el patrón date de las entradas anteriores. Compruebe si puede leer los datos modificados. Hágalo con el comando Summarize. 22 11

savetodata(), 1 Dentro del objetodate hay un campo de datos private long, que representa el número de milisegundos desde las 12:00 am del 1 de enero de 1970. savetodata() guarda las horas del registro comolongs y no comostrings. Puede recuperar los long con el método long gettime() de date. Deberá construir un DataOutputStream para poder acceder a los métodos capaces de escribir longs. No puede construir uno directamente desde un archivo: primero deberá construir unfileoutputstream. 23 savetodata(), 2 UtilicesaveToText() como modelo para el resto del método. Recuerde detectar excepciones. Ahora pruébelo. Intente escribir el mismo conjunto de horas de registro como texto y como datos en archivos distintos. Abra los dos en el Bloc de notas y compruebe su longitud (puede obtener un recuento exacto de bytes seleccionando Propiedades con el botón derecho en el Explorador). 24 12

loadfromdata(), 1 Escriba un bucle while para leer longs de DataInputStream siempre y cuando haya alguno (compruebe la documentación), para convertir cada uno de ellos a undate (hay un constructor Date(long)) y para agregar el Date a la lista devuelta. Preste especial atención a lo que ocurre cuando se queda sin longs en el flujo de entrada. Cómo puede salir del bucle while? Compílelo y pruébelo. 25 loadfromdata(), 2 Asegúrese de que puede escribir datos de registro en modo de datos, limpiar el registro y leer de nuevo los mismos datos. Puede crear datos de registro en este formato con el Bloc de notas? Puede leer de nuevo datos escritos en modo de datos como texto? Y al contrario? Por qué? 26 13

savetoobject(), 1 En este método escribiremos toda la lista de fechas como un único objeto utilizando un ObjectOutputStream. Consulte la documentación para saber cómo crear un ObjectOutputStream y cómo llamar al métodowriteobject(). Esta llamada simple escribirá la lista y todo lo que contiene. Analizaremos su funcionamiento en la siguiente clase. Compílelo y pruébelo. Escriba algunos datos de registro en modo de objeto y ábralos en el Bloc de notas. Compruebe la longitud del archivo. Cómo es en comparación con el modo de datos y texto? 27 loadfromobject() Escriba el contenido del bloque try/catch para leer toda la lista del registro utilizando un ObjectInputStream. Tendrá que construir el flujo, llamar a readobject() y, después, cerrar el flujo. Compílelo y pruébelo. Puede volver a leerlo en la lista del registro que creó anteriormente en el modo de objeto? Puede leer de nuevo los datos en modo de texto o de datos utilizando el modo de objeto? Qué ventajas encuentra al comparar cada modo de datos? 28 14