La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -

Presentaciones similares


Presentación del tema: "Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -"— Transcripción de la presentación:

1 Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … - Ingeniería de la Programación Práctica 2 Práctica 2: Aspectos de Java

2 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Objetivos Manejar excepciones en Java. Utilizar clases que implementan colecciones de datos en memoria. Programar la entrada/salida de datos por consola y fichero. Práctica 2: Aspectos de Java

3 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Contenidos Manejo de excepciones. Bibliotecas de Java Paquete java.lang (núcleo principal de java) Paquete java.util (utilidades, colecciones) Paquete java.io (Entrada / Salida) Práctica 2: Aspectos de Java

4 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Una excepción es una condición anormal que ocurre durante la ejecución de un programa que interrumpe el flujo de ejecución normal. Manejo de excepciones: método estructurado para capturar excepciones, es decir, para detectar y gestionar errores/situaciones anormales durante la ejecución de un programa. Levanta una excepción Método donde ocurre una excepción/error Método sin un manejador de excepción Transmite la excepción Llamada a método Captura la excepción Método con un manejador de excepción main() Práctica 2: Aspectos de Java

5 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones Las excepciones son objetos de Java descendientes de la clase Throwable. Existe un conjunto de excepciones predefinidas (explicado después), pero los programadores pueden definir excepciones nuevas en sus métodos. Con la palabra throw se lanza una excepción, es decir, se crea un objeto (con información asociada al tipo de excepción) que se devuelve al método que hizo la llamada. Cuando un método puede devolver excepciones éstas se declaran en su cabecera utilizando: throws TipoExcepción1, TipoExcepción2 Práctica 2: Aspectos de Java

6 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones try { llamada a método_m() } método_m() throws Exception1 { throw new Exception1() } catch( Exception1 e) { ….. } Bloque donde puede producirse una excepción catch( Exception2 e) { ….. } Manejadores finally { ….. } Bloque opcional Práctica 2: Aspectos de Java

7 Manejo de excepciones: Jerarquía parcial
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: Jerarquía parcial Object Throwable Exception Error VirtualMachineError AWTError RuntimeException IOException OutOfMemoryError NullPointerException StackOverflowError ClassCastException Práctica 2: Aspectos de Java

8 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Las excepciones que se lanzan o declaran explícitamente deben capturarse. Si no, el programa no compilará. Las excepciones que no se capturan explícitamente pueden provocar que se detenga la ejecución del programa. Existen dos categorías: Verificadas: el compilador obliga a su verificación. Cualquier excepción definida por el programador y que se lanza explícitamente. No Verificadas: el compilador no obliga a su verificación. Por ejemplo, Arithmetic Exception, NullPointerException, etc. Práctica 2: Aspectos de Java

9 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) try{ ... } Marca un bloque de código donde puede producirse una excepción. Si se lanza una excepción el control se transfiere a un bloque catch. catch( Excepción e ){ ... } Bloque de código que captura la excepción del tipo “Excepción”. Pueden definirse varios bloques catch para tratar distintas excepciones. Se ejecuta el primer bloque cuyo argumento es compatible. finally{ ... } SIEMPRE se ejecuta, se lance o no una excepción en el bloque try. Código de finalización o de limpieza. throw ObjetoExcepción Lanza explícitamente una excepción. throws listaExcepciones Indica que un método A, que es llamado por un método B, puede generar alguna excepción de la lista, pero no la captura. Será capturada por el método por el cual es llamado (método B). Sólo deben indicarse las excepciones “verificadas”. El resto no es necesario. Práctica 2: Aspectos de Java

10 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones (Ejemplo1) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) class MiExcepcion extends Exception { int datoInformacion; // Constructor MiExcepcion( int datos ) { datoInformacion = datos; } // Sobreescribe el método getMessage() heredado de Throwable public String getMessage() { return( "La máxima es: Compra Barato, Vende Caro\n" + "El valor de datoInformacion es: " datoInformacion ); Práctica 2: Aspectos de Java

11 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Manejo de excepciones (Ejemplo1) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) class ejEx01 { public static void main( String args[] ) { try { for( int cnt=0; cnt < 5; cnt++ ) { if( cnt == 3 ) throw new MiExcepcion( 3 ); System.out.println( "Procesando datos para cnt = :" + cnt ); } System.out.println("Esta línea no debe ejecutarse nunca." ); } catch( MiExcepcion e ) { System.out.println("Controlador de Excepciones. ” + e.getMessage() ); System.out.println("Controlador de Excepciones. Ejecutando return." ); return; } finally { System.out.println(”Se entra independientemente de la sentencia return del Controlador de Excepciones." ); } System.out.println( "Esta sentencia nunca se ejecutará debido a la sentencia return del controlador de excepciones." ); Práctica 2: Aspectos de Java

12 Manejo de excepciones: uso de throws
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: uso de throws class ejEx02 { static void demoproc() throws NullPointerException { // No sería necesario el throws System.out.println( "Dentro de demoproc" ); throw new NullPointerException( "demo" ); } public static void main( String args[] ) { try { demoproc(); catch( NullPointerException e ) { System.out.println( “Capturo la excepción lanzada en demoproc: " + e ); Práctica 2: Aspectos de Java

13 Manejo de excepciones: uso de throws
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: uso de throws class ejEx03 { static void demoproc() throws MiExcepcion { // SÍ que sería necesario el throws System.out.println( "Dentro de demoproc" ); throw new MiExcepcion( 1 ); } public static void main( String args[] ) { try { demoproc(); } catch( MiExcepcion e ) { System.out.println( “Capturo la excepción lanzada en demoproc: " + e ); Práctica 2: Aspectos de Java

14 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
La biblioteca de clases (paquetes) Plataforma Java 2 Standard Edition (J2SE) java.lang Núcleo principal de Java. java.util Utilidades de estructuras de datos. java.io Entrada / Salida. java.text Formato y adaptación a idiomas de texto, fechas y números. java.math Operaciones aritméticas con enteros (BigInteger) y coma flotante (BigDecimal). java.awt Componentes para el diseño de la interfaz de usuario y gestión de eventos. javax.swing Nuevas componentes para el diseño de la interfaz de usuario (árbol, tabla, paneles, …). Práctica 2: Aspectos de Java

15 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
La biblioteca de clases (paquetes) Plataforma Java 2 Standard Edition (J2SE) javax Extensiones al lenguaje Java. java.applet Creación de applets. java.beans Desarrollo de componentes JavaBeans. javax.xml Procesado de documentos XML. java.sql javax.sql Compatibilidad para el acceso a base de datos y procesamiento de datos mediante JDBC. java.rmi Programación distribuida. javax.net Desarrollo de aplicaciones en red. java.security Soporte para seguridad criptográfica. Práctica 2: Aspectos de Java

16 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Paquete java.lang Este paquete contiene el núcleo principal de Java. Se importa automáticamente en los programas. Incluye entre otros elementos de utilidad: Clases: java.lang.Object: es la clase raíz de la jerarquía de Java. Es la superclase de cualquier clase. java.lang.Class: instancias de Class son las clases, interfaces, tipos primitivos y arrays de un programa en tiempo de ejecución. java.lang.System: contiene atributos y métodos de clase útiles. java.lang.Math: contiene métodos para realizar operaciones matemáticas básicas java.lang.String: instancias de String son cadenas de caracteres. Integer, Float, Double, …: clases que encapsulan tipos primitivos. Interfaces: Cloneable, Runnable, Comparable, … Excepciones: Throwable, Exception, ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException, … Práctica 2: Aspectos de Java

17 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
java.lang.Object Raíz de la jerarquía de clases Es la superclase de cualquier clase creada por el programador Define los siguientes métodos que son heredados por la clases derivadas Object clone(): crea y devuelve una copia ‘superficial’ de un objeto. boolean equals(Object obj): indica si dos referencias apuntan al mismo objeto. String toString(): devuelve una cadena con el nombre de la clase y el código (hash) del objeto. Normalmente las clases derivadas redefinen este método para mostrar información acerca del objeto. Class getClass(): devuelve la clase en tiempo de ejecución de un objeto. System.out.print(c.getClass.getName()) mostraría el nombre de la clase a la que pertenece c. int hashCode(): devuelve el código hash de un objeto. Objetos “iguales” deben tener códigos iguales. void finalize(): es el método invocado por el garbage collector de Java cuando el objeto ya no es accesible. Puede ser redefinido por el programador para liberar otros recursos (p.e. cerrar archivos). Práctica 2: Aspectos de Java

18 java.lang.Object (Ejemplo2)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Object (Ejemplo2) package Figuras; public class Circulo extends Figura implements Cloneable{ public Object clone() throws CloneNotSupportedException{ return super.clone(); } public String toString(){ String s= "posx= " + x + " posy= " + y + " radio= " +radio; return s + " hash: " + this.hashCode(); Para clonar un objeto: Indicar que se implementa la interfaz Cloneable Redefinir método clone() llamando al método clone de la clase base Capturar la excepción CloneNotSupportedException El objeto devuelto se promociona al tipo esperado (cast) Práctica 2: Aspectos de Java

19 java.lang.Object (Ejemplo2_1.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Object (Ejemplo2_1.java) import Figuras.Circulo; public class Ejemplo2_1 { public static void main(String[] args) { Circulo c1 = new Circulo(100,100,50); Circulo c2; try { c2 = (Circulo) c1.clone(); if (c1.equals(c2)) System.out.println("C1 = C2"); else System.out.println("C1 != C2"); System.out.println("C1: " + c1); System.out.println("C2: " + c2); } catch (CloneNotSupportedException e) { System.out.println("No se puede clonar este objeto."); }}} C1 y C2 son distintos El código hash es diferente Sus atributos valen lo mismo: tanto tipos primitivos, como arrays o referencias. System.out.println("C1: " + c1) es equivalente a System.out.println("C1: " + c1.toString()) Práctica 2: Aspectos de Java

20 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
java.lang.Math Métodos estáticos que implementan funciones matemáticas. double sin(double ), double cos(double ), double tan(double ), double exp(double ), double log(double ), double pow(double , double ), int max(int, int), float max(float, float ), double max(double, double ), int min(int, int), float min(float, float ), double min(double, double ), int abs(int ), float abs(float ), double abs(double ), double random(), double sqrt(double ), int round(float ), long round(double ). Constantes: PI, E Práctica 2: Aspectos de Java

21 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
java.lang.String La clase String se utiliza para representar cadenas de caracteres. Son constantes, por lo que su valor no cambia una vez creadas. "...", String(), String(String str), String(char [] str) int length(): devuelve la longitud en caracteres de la cadena. String trim(): Elimina blancos, tabuladores y caract. de control al final de la cadena char charAt(int indice): devuelve el carácter en la posición indice. String substring(int inicio, int fin): devuelve una subcadena entre las posiciones inicio y fin. boolean equals(String str): s1.equals(s2) devuelve true si s1 y s2 guardan la misma cadena. int compareTo(String str): s1.compareTo(s2) devuelve 0 si s1 y s2 guardan la misma cadena, un entero negativo si s1 < s2 y un entero positivo si s1 > s2. int indexOf(int ch): devuelve la posición de la primera ocurrencia de ch. String concat(String str): concatena dos cadenas. String toLowerCase(): transforma los caracteres a minúsculas. String toUpperCase(): transforma los caracteres a mayúsculas. Práctica 2: Aspectos de Java

22 java.lang.String (Ejemplo2_2.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.String (Ejemplo2_2.java) String s1 = "Hola mundo."; String s3 = s1; String s2 = new String("Hola mundo."); if (s1==s3) System.out.println("El mismo objeto cadena!"); if (s1.equals(s2)) System.out.println("Cadenas Iguales!"); System.out.println("La longitud de s1 es: " + s1.length()); System.out.println("El carácter en la posición 3 es: " + s1.charAt(3)); System.out.println("El carácter 'a' está en la posición: " + s1.indexOf('a')); s2= s2.concat(" Adiós"); // s2 <- “Hola mundo. Adiós” String s4="Hola mundo".substring(2,4); //s4 <- ”la” Práctica 2: Aspectos de Java

23 java.lang.StringBuffer
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.StringBuffer La clase StringBuffer también guarda cadenas de caracteres. Puede modificarse el contenido o la capacidad del objeto. StringBuffer(), StringBuffer(String str), StringBuffer(int long) void setLength(int nuevaLong) void setCharAt(int indice, char ch): sustituye el carácter en la posición indice por ch void insert(int posicion, tipo dato): inserta la representación en cadena del dato a partir de la posición indicada. int capacity(): capacidad máxima de la cadena. void append(tipo dato): añade la representación en cadena del argumento al final. String toString( ): devuelve un objeto String que guarda la misma cadena StringBuffer sb1 = new StringBuffer(20); int c=sb1.capacity(); // i <- 20 int l=sb1.length(); // l <- 0 sb1.append("Hoa a Todos"); // s1 <- "Hoa a Todos" l=sb1.length(); // l <- 11 sb1.insert(2,'l'); // s1 <- "Hola a Todos" Práctica 2: Aspectos de Java

24 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Clases “envoltorio” Las clases “envoltorio” encapsulan un tipo primitivo de datos. Boolean, Byte, Character, Double, Float, Integer, Long, Short. Cada clase proporciona métodos que devuelven el tipo primitivo. char charValue() int intValue() float floatValue() ... Proporcionan algunos métodos estándares clone(), toString(), compareTo() Constantes de clase p.e. MAX_VALUE, MIN_VALUE, en Integer. Métodos de clase Convertir de número a cadena: String toString(int i), devuelve el objeto String que representa al entero i Convertir de cadena a número: int parseInt(String s), devuelve el valor entero correspondiente a s Integer valueOf(String s), devuelve el objeto Integer correspondiente a s Práctica 2: Aspectos de Java

25 Ejemplo Clases “envoltorio” (Ejemplo2_2.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo Clases “envoltorio” (Ejemplo2_2.java) String s_ent = Integer.toString(1234); String s_real = Double.toString(123.4); String s5="123a"; String s6="123a"; try { int i = Integer.parseInt("123"); double d = Double.parseDouble("123,4");// error de formato } catch (NumberFormatException e) { System.out.println(“No es un valor numérico"); Práctica 2: Aspectos de Java

26 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
java.lang.System La clase System proporciona algunos atributos y métodos de clase útiles. No puede ser instanciada. Atributos de clase. static InputStream in: entrada estándar static PrintStream out: salida estándar static PrintStream err: salida de error Métodos de clase static long currentTimeMillis(): devuelve el tiempo en milisegundos desde 1/1/1970 static void exit(int status): termina la ejecución del programa. static Properties getProperties(): obtiene las propiedades del sistema (versión de JRE, classpath, sistema operativo, usuario, etc.) static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length): utilidad para copiar arrays. static void setIn(InputStream in): reasigna la entrada estándar. static void setOut(PrintStream out): reasigna la salida estándar. static void setErr(PrintStream err): reasigna la salida de error. Práctica 2: Aspectos de Java

27 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Paquete java.util Utilidades para arrays Colecciones de datos Modelo de eventos Fecha y hora Internacionalización Otras (tokenizadores, generador de números aleatorios, …) Práctica 2: Aspectos de Java

28 Paquete java.util (Colecciones de datos)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Paquete java.util (Colecciones de datos) java.util.Arrays Utilidades para manipulación de arrays: ordenación, búsqueda, copia y comparación. java.util.ArrayList Lista indexada redimensionable de objetos Implementa las interfaces List, Cloneable y Serializable No está sincronizada, el programador debe controlar la ejecución concurrente de varios threads sobre la lista java.util.HashSet Conjunto de objetos que no se pueden repetir Implementa las interfaces Set, Cloneable y Serializable Utiliza una tabla Hash. Coste de inserción, borrado y búsqueda constante java.util.TreeSet Conjunto implementado con una estructura de árbol. Coste de inserción, borrado y búsqueda logarítmico. Práctica 2: Aspectos de Java

29 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Paquete java.util java.util.Vector: Lista indexada de objetos redimensionables. Implementa las interfaces List, Cloneable y Serializable. Está sincronizada. java.util.Hashtable: Implementación de un mapa mediante tablas de dispersión. Implementa Map, Clonable y Serializable Asocia claves con valores que pueden ser cualquier objeto. Interface java.util.Iterator: ofrece métodos para recorrer una colección de objetos. Práctica 2: Aspectos de Java

30 Clase java.util.ArrayList<E>
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.ArrayList<E> ArrayList(), ArrayList(int capacidad_inicial) boolean add (Object obj), boolean add(int indice, E obj) void clear() Object clone(), Object[] toArray() boolean contains(Object obj) E get(int i) int indexOf(Object e), int lastIndexOf(Object e) boolean isEmpty(), E remove(int index), boolean remove(Object obj) E setElementAt(int index, E obj) int size() Iterator iterator() Práctica 2: Aspectos de Java

31 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Clase java.util.Vector Vector(), Vector(int capacidad), Vector(int capacidad, int incremento) void addElement(Object obj) boolean removeElement(Object obj) void removeAllElements() Object clone(), void copyInto(Object anArray []) int capacity(), int size(), boolean isEmpty(), void setSize(int newSz) boolean contains(Object obj) int indexOf(Object e, int ind), int lastIndexOf(Object e, int ind) Object elementAt(int index) Object firstElement(), Object lastElement() void setElementAt(Object obj, int index) void removeElementAt(int index) void insertElementAt(Object obj, int index) Iterator iterator() Práctica 2: Aspectos de Java

32 Clase java.util.Hashtable
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Hashtable(), Hashtable(int nElementos), Hashtable(int nElementos, float factorCarga) int size(), boolean isEmpty() Enumeration keys(), Enumeration elements() boolean contains(Object value), boolean containsKey(Object key) Object get(Object key) void rehash() Object put(Object key, Object value) Object remove(Object key) void clear() Object clone() String toString() Práctica 2: Aspectos de Java

33 Interface java.util.Iterator
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Facilita el recorrido de las estructuras de datos. Ofrece dos métodos: public boolean hasNext () public Object next () Lanza la excepción NoSuchElementException si no hay más elementos public void remove() Borra el último elemento devuelto por next() de la colección Lanza la excepción UnsupportedOperationException si la colección no soporta esta operación Lanza la excepción IllegalStateException si no se ha llamado a next() o se llama dos veces seguidas a remove(). Los objetos de la enumeración sólo se pueden usar una vez. No se puede retroceder a elementos anteriores. Práctica 2: Aspectos de Java

34 Ejemplo colección ArrayList (Ejemplo2_3.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) import java.util.ArrayList; import java.util.Iterator; public class Ejemplo2_3 { public static void main(String[] arg){ ... ArrayList v = new ArrayList(); for (int i=0; i<10; i++) { v.add(new Integer(i)); } // Lista los elementos del vector usando Iterator Iterator it = v.iterator(); while (it.hasNext ()) { System.out.print(it.next() + ", "); System.out.println(); // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // Lista los elementos del vector usando get(int index) for (int i=0; i<v.size(); i++) { System.out.print(v.get(i) + ", "); // Imprime la representación del vector como cadena System.out.print(v.toString()); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] }} Práctica 2: Aspectos de Java

35 Entrada / Salida (Flujos de bytes)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Entrada / Salida (Flujos de bytes) Las clases para manejar la E/S derivan de las clases abstractas InputStream y OutputStream. Flujos de bytes (byte streams): secuencias de bytes que se escriben (leen) en (desde) dispositivos externos. En caso de error en la E/S, los métodos generan la excepción IOExcepcion. El programador debe escribir el código necesario para capturarla. P. e. si la fuente de datos no está disponible: el fichero no existe, o no tiene permisos de escritura, etc. FileInputStream y FileOutputStream permiten la lectura y escritura de bytes en ficheros, respectivamente. Práctica 2: Aspectos de Java

36 Ejemplo flujo de bytes (Ejemplo3, CopiarBytes.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo flujo de bytes (Ejemplo3, CopiarBytes.java) import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopiarBytes { public static void main(String[] args) throws IOException{ FileInputStream entrada=null; FileOutputStream salida=null; try { entrada= new FileInputStream("entrada.txt"); salida= new FileOutputStream("salida.txt"); int c; while ((c=entrada.read())!=-1){ salida.write(c); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } read() devuelve -1 cuando alcanza el final del stream close() en el bloque finally garantiza que se cierra el stream Práctica 2: Aspectos de Java

37 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Flujos de caracteres Las clases que manejan flujos de caracteres transforman los bytes en caracteres según el juego de caracteres especificado. InputStreamReader y OutputStreamWriter son de propósito general. FileReader y FileWriter son orientadas a fichero y transforman bytes en caracteres según el juego de caracteres local. InputStreamReader y OutputStreamWriter permiten especificar el juego de caracteres. Se definen sobre un flujo de bytes. InputStreamReader in = new InputStreamReader (new FileInputStream (“fichero”)); Práctica 2: Aspectos de Java

38 Ejemplo flujos de caracteres (Ejemplo3, CopiarCaracteres.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo flujos de caracteres (Ejemplo3, CopiarCaracteres.java) import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopiarCaracteres { public static void main(String[] args) throws IOException{ FileReader entrada=null; FileWriter salida=null; try { entrada= new FileReader("entrada.txt"); salida= new FileWriter("salida_car.txt"); int c; while ((c=entrada.read())!=-1){ salida.write(c); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } }} La variable entera c guarda un carácter (16 bits) Práctica 2: Aspectos de Java

39 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
E/S orientada a líneas Las clases BufferedReader y PrintWriter están diseñadas para leer y escribir líneas de texto, respectivamente. Independientes del terminador de línea (“\r”, “\n”, “\r\n”) Se definen sobre un flujo de caracteres (FileReader, FileWriter). Práctica 2: Aspectos de Java

40 Ejemplo E/S orientada a líneas (Ejemplo3, CopiarLineas.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo E/S orientada a líneas (Ejemplo3, CopiarLineas.java) import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.BufferedReader; public class CopiarLineas { public static void main(String[] args) throws IOException{ BufferedReader entrada=null; PrintWriter salida=null; try { entrada= new BufferedReader(new FileReader("entrada.txt")); salida= new PrintWriter(new FileWriter("salida_lin.txt")); String l; while ((l=entrada.readLine())!=null){ salida.println(l); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } readLine() lee una línea. null indica el final del fichero println() escribe una línea añadiendo el terminador de línea. Práctica 2: Aspectos de Java

41 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
E/S por consola System.in : Objeto de la clase InputStream. Representa el flujo de entrada estándar (teclado). System.in.read(): lee el siguiente byte. System.out: Objeto de la clase PrintStream. Representa el flujo de salida estándar (pantalla). System.out.print() y System.out.println(): métodos sobrecargados para escribir caracteres. System.err: Representa el flujo de salida de error. System.err.print() y System.err.println(). Práctica 2: Aspectos de Java

42 Ejemplos E/S estándar (Ejemplo3, LeerCadena.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplos E/S estándar (Ejemplo3, LeerCadena.java) Leer una cadena de la entrada estándar import java.io.BufferedReader; import java.io.InputStreamReader; public class LeerCadena { public static void main(String[] args) { BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); String s=""; System.out.println("Escriba su nombre: "); try{ s=in.readLine(); }catch(Exception E){ s = ""; } System.out.println("Su nombre es: " + s); } Práctica 2: Aspectos de Java

43 Ejemplos E/S estándar (Ejemplo3, LeerEntero.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplos E/S estándar (Ejemplo3, LeerEntero.java) Leer un entero de la entrada estándar import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class LeerEntero { public static void main(String[] args) { BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); String s=""; int edad=0; System.out.println("Escriba su edad: "); try{ edad=Integer.parseInt(in.readLine().trim()); } catch(NumberFormatException e){ System.out.println("No es un entero."); catch (IOException e){ System.out.println("Error."); System.out.println("Su edad es: " + edad); Práctica 2: Aspectos de Java

44 Clase java.util.Scanner
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.Scanner Divide la cadena de entrada en tokens separados por un delimitador(espacio en blanco por defecto). El token resultante puede convertirse a un tipo básico utilizando el correspondiente método next. Un objeto de la clase Scanner se construye sobre un flujo de caracteres, un fichero (File) o sobre la entrada estándar (System.in). public void Scanner(File source); public void Scanner(InputStream source): construye un objeto Scanner. public bool hasNext(): devuelve cierto si quedan tokens en la cadena. hasNextDouble(), hasNextInt(), …: devuelven true si el siguiente token es del tipo esperado. public String next(): devuelve el siguiente token (String) public double nextDouble(), public int nextInt(), …: devuelven el siguiente token convertido al tipo indicado. public void useDelimiter(String s): modifica mediante una exp. regular el conjunto de delimitadores. public void useLocale(Locale l): modifica el formato numérico local. Práctica 2: Aspectos de Java

45 Clase java.util.Scanner (Ejemplo 3, EscanearTeclado.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.Scanner (Ejemplo 3, EscanearTeclado.java) import java.util.InputMismatchException; import java.util.Scanner; public class EscaneaTeclado { public static void main(String[] args) { Scanner s=null; try{ s=new Scanner(System.in); System.out.println("Introduce nombre:"); String nombre = s.nextLine(); System.out.println("Introduce edad:"); int edad= s.nextInt(); System.out.println("Nombre:" + nombre); System.out.println("Edad:" + edad); } catch (InputMismatchException e){ System.out.println("Dato incorrecto"); Práctica 2: Aspectos de Java

46 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Formatear la salida Método format() de PrintWriter (flujo de caracteres) y PrintStream (flujo de bytes). Una cadena con especificadores de formato y la lista de argumentos. System.out.format(“La raíz cuadrada de %d es %f. %n”, n, r); Algunos tipos de especificadores de formato: %d  entero %f  reales %s  cadenas %n  terminador de línea (independiente de la plataforma) Práctica 2: Aspectos de Java

47 Ingeniería de la Programación, 4º curso FI ( DSIC - UPV)
Formatear la salida Elementos opcionales (de izq. a dcha.) Índice del argumento con el que empareja el especificador de formato. Flags: +: número con signo Carácter de relleno -: alinea a la derecha ,: formato de número con separadores decimales locales. Anchura mínima, por defecto se alinea a la izquierda. Precisión: para reales es la precisión matemática, para cadenas es la anchura máxima. Se trunca por la derecha. Ejemplo: System.out.format (“%f, %1$ f”, Math.PI) Salida: 3,141593, , Práctica 2: Aspectos de Java

48 Flujos de objetos: “Serialización”
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Permite hacer los objetos persistentes, es decir, almacenar objetos en archivos, para poder recuperarlos en otro momento. Para “serializar” una clase, ésta debe implementar la interfaz Serializable (java.io). ObjectOutputStream es el flujo de objetos de salida que se definen sobre FileOutputStream. ObjectOutputStream(FileOutputStream fich); writeObject(Object obj); ObjectInputStream es el flujo de objetos de entrada que se define sobre FileInputStream. ObjectInputStream(FileInputStream fich); Object readObject(); La lectura de los objetos desde el archivo debe realizarse en el mismo orden en que se han escrito . Práctica 2: Aspectos de Java

49 Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) import java.util.ArrayList; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import Figuras.Circulo; public class Serializacion { static ArrayList v; static void GuardarVector(){ try { ObjectOutputStream objout = new ObjectOutputStream ( new FileOutputStream("prueba.dat")); objout.writeObject(v); objout.close(); System.out.println("Archivo guardado."); } catch (IOException e) { System.out.println("Error guardando archivo: "); Práctica 2: Aspectos de Java

50 Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) static void LeerVector(){ try { ObjectInputStream objin = New ObjectInputStream (new FileInputStream("prueba.dat")); v= (ArrayList) objin.readObject(); objin.close(); System.out.println("Archivo leído."); } catch (ClassNotFoundException e) { System.out.println("Error!"); catch (IOException ex) { System.out.println("Error abriendo archivo: "); Práctica 2: Aspectos de Java

51 Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java)
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) public static void main(String[] args) { v = new ArrayList(); // ArrayList ya implementa Serializable for (int i=0;i<10;i++){ Circulo c = new Circulo(1,1,i); v.add(c); } GuardarVector(); v.clear(); //borra los elementos del array LeerVector(); for (int i=0;i<v.size();i++){ ((Circulo) v.get(i)).dibujar(); Los objetos del Array (Circulo) deben definirse como “serializables” public class Circulo extends Figura implements Serializable{ Práctica 2: Aspectos de Java

52 Ejercicio: Servicio de Mantenimiento
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree un proyecto nuevo llamado “GestionActivos” Cree el paquete “dominio” que contendrá las clases del dominio y la lógica de la aplicación. Clase Maquina (fichero Maquina.java) con los atributos: número (int), marca, modelo, numSerie, observaciones (String), con un constructor que inicialice los atributos Menú contextual de eclipse: source -> Generate Constructor using fields Métodos set y get para cada atributo Menú contextual de eclipse: source -> Generate getters and setters Redefina el método toString() para que devuelva en una cadena los valores de los atributos de una instancia. Práctica 2: Aspectos de Java

53 Ejercicio Servicio de Mantenimiento
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase GestionMaquinas (fichero GestionMaquinas.java) Clase que maneja la lista de avisos de incidencias, que será un atributo privado de tipo ArrayList. Con getter y setter para su atributo lista. Con los métodos: void addMaquina(Maquina m) throws MaquinaYaExiste: añade una nueva Máquina a la lista. En caso de que exista ya una máquina con el mismo número, no la añade y lanza la excepción MaquinaYaExiste. Maquina getMaquinaPorNumero(int num): devuelve la Máquina de la lista cuyo número sea num. void borraMaquinaPorNumero(int num): borra la Máquina de la lista cuyo número sea num. void guardaListaMaquinas(String fichero): serializa los objetos de la lista en un fichero. void cargaListaMaquinas(String fichero): carga en memoria la lista de avisos guardada previamente en un fichero. Recuerde indicar en la declaración de Maquina que implementa la interfaz Serializable Práctica 2: Aspectos de Java

54 Ejercicio Servicio de Mantenimiento
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree el paquete "excepciones" e incluya las excepciones que considere necesarias, p.e. Clase MaquinaYaExiste (fichero MaquinaYaExiste.java) Clase que extiende Exception Con constructor vacío. Redefinir el método String getMessage()para que devuelva el mensaje asociado a la excepción. Práctica 2: Aspectos de Java

55 Ejercicio Servicio de Mantenimiento
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree el paquete "interfaz" que incluirá las clases relacionadas con la interfaz de la aplicación con el usuario. Clase Menu (archivo Menu.java) Con los atributos: Titulo del menú (string) Lista de opciones de menú (ArrayList) Con constructor que inicialice los atributos. Con los métodos: public void escribirMenu(): visualiza por consola el menú de la aplicación. public int getOption(): devuelve la opción introducida por teclado. Práctica 2: Aspectos de Java

56 Ejercicio Servicio de Mantenimiento
Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Las opciones del menú serán las siguientes: 1.- Introducir Máquina 2.- Listar Máquinas 3.- Recuperar Máquina por número 4.- Borrar Máquina por número 5.- Guardar Archivo de Incidencias 6.- Cargar Archivo de Incidencias 0.- Salir Clase PrincipalConsola (archivo PrincipalConsola.java) Inicializa el menú de la aplicación y lo muestra en pantalla. Pide al usuario los datos necesarios para cada una de las opciones del menú e invoca al método de la clase GestionMaquinas que implementa la funcionalidad requerida. Realiza las validaciones sintácticas necesarias sobre los datos (datos tipo int o date) y en caso de error informa al usuario. Práctica 2: Aspectos de Java


Descargar ppt "Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -"

Presentaciones similares


Anuncios Google