• No se han encontrado resultados

AP II 2015 Clase 2

N/A
N/A
Protected

Academic year: 2020

Share "AP II 2015 Clase 2"

Copied!
23
0
0

Texto completo

(1)

Algoritmos y

Programación II

Manejo de Excepciones

Se emplean para detectar hechos excepcionales, como por ejemplo, errores que ocurren dentro de un método.

Las excepciones son elementos que almacenan información y la transmiten a través de la secuencia de llamadas de los métodos

hasta que sean recogidas por alguna rutina.

funcion1(){ … funcion2(){

funcion3(){ …}

(2)

Manejo de Excepciones

El código que eventualmente puede generar una excepción se encierra en un bloque try {…}.

try{

z = x/y; // puede producirse una excepción de división por cero }

Luego del bloque try {…} vienen los bloques catch {…} que son los que manejarán las excepciones que se produzcan. Se define un bloque catch por cada excepción que queramos manejar.

catch (ArithmeticException e){ System.out.println( e ); }

(3)

Manejo de Excepciones

import java.io.*;

public class DivideByTwo {

public static void main( String [ ] args ) {

BufferedReader in = new BufferedReader( new InputStreamReader( System.in)); int x;

String oneLine;

System.out.println( "Enter an integer: " ); try {

oneLine = in.readLine( ); // puede lanzar IOException

x = Integer.parseInt( oneLine ); // puede lanzar NumberFormatException

System.out.println( "Half of x is " + ( x / 2 ) ); }

catch(IOException e ){ System.out.println( e ); }

catch(NumberFormatException e ){ System.out.println( e ); }

} }

(4)

Manejo de Excepciones Si necesitamos que una parte de código se ejecute siempre, hayan

ocurrido o no excepciones entonces los encerramos en un bloque finally {…}.

public class Numeros{

public static void main( String [ ] args ) { int [] vector1;

vector1 = new int [5]; try{

for (int i = 0; i <8; i++){ vector1 [i] = i+2;

} }

catch (IndexOutOfBounds e) { System.out.println( e ); }

finally{ System.out.println( “Esto se imprime siempre” ); }

} }

(5)

Manejo de Excepciones En Java vienen predefinidas un conjunto de excepciones que

podemos elegir manejarlas o no. Si no las manejamos se propagan y el programa se interrumpe lanzando un mensaje de error que

identifica a la excepción lanzada.

Algoritmos y

(6)

Manejo de Excepciones

Otro tipo de excepciones estándar que vienen definidas en Java son las standard checked. Si un método puede lanzar una de estas

excepciones directa o indirectamente, debemos indicar de forma explícita esta situación incluyendo la cláusula throws.

(7)

Manejo de Excepciones Ejemplo:

public procesarFichero() throws IOException {

… // código donde puede ocurrir la excepción pero no la manejamos ... // por lo tanto se propaga hacia el método padre

}

public static void main( String [ ] args ) { try {

procesarFichero(); }

catch (IOException e) { System.out.println( e ); }

}

(8)

Manejo de Excepciones También podemos lanzar excepciones a propósito, para esto se utiliza la cláusula throw.

public metodoConExcepcion() throws Exception { throw new Exception(“Excepción lanzada”); }

public static void main( String [ ] args ) { try {

if (….) { metodoConExcepcion(); } else {….}

}

catch (Exception e) { System.out.println( e ); }

}

(9)

Entrada y Salida

La entrada y salida (E/S) se realiza en Java empleando el paquete java.io:

import java.oi.*;

public class DemThrow{

public static void procesarFichero(String archivo) throws IOException{ //implementación que propaga cualquier excepción hacia arriba

}

public static void main (String [] args){ for (i=0; i<args.legth; i++){

Try{ procesarFichero(args[i]); }

Catch (IOException e) { System.out.println(e);} }

} }

(10)

E/S

Los medios básicos de entrada y salida de datos son la consola (terminal) y los archivos.

En java existen 3 canales de E/S por consola:

System.in: entrada estándar (por teclado).

System.out: salida estándar (por pantalla).

System.err: salida de errores .

(11)

E/S

Para leer una línea de la entrada estándar (teclado) empleamos el método readLine y guardamos el resultado en un objeto de tipo String.

El método readLine lee hasta que encuentra un final de línea o el final del archivo. Los caracteres leídos (salvo el final de línea o de archivo) se devuelven como un nuevo String.

Para usar readLine, primero debemos crear un objeto

BufferedReader sobre un objeto InputStreamReader que a su vez se crea partiendo de System.in de la siguiente forma:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

(12)

E/S

Para leer datos ingresados por consola usamos: BufferedReader in = new BufferedReader( new InputStreamReader( System.in ));

String unaLinea;

unaLinea = in.readLine();

Para impresión de datos en pantalla usamos: System.out.println( “esto es un dato”);

Para impresión de mensajes de error en pantalla usamos: System.err.println(“Número de CUIT inválido”);

(13)

E/S Ejemplo:

import java.io.*;

public class DividePorDos{

public static void main( String [ ] args ){

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

int x;

String unaLinea;

System.out.println(“Escribe un entero: “); try{

unaLinea = in.readLine( );

x = Integer.parseInt( unaLinea );

System.out.println( "La mitad de x es " + ( x / 2 ) ) ; }

catch( Exception e ){ System.out.println( e); } }

}

(14)

E/S

Para generar el tipo primitivo int a partir de un String podemos usar el método estático parseInt de la clase Integer:

int x;

String unaLinea = “cinco”

x = Integer.parseInt( unaLinea );

Si la línea que leemos con readLine tiene mas de un elemento y queremos separarlos usamos un objeto StringTokenizer, que permite separar en tokens un String. Consruimos este objeto tomando como parámetro el String:

StringTokenizer str = new StringTokenizer(“mi String”);

Para usar la clase StringTokenizer debemos importar el paquete java.util.*: import java.util.* ;

(15)

E/S La clase StringTokenizer nos permite dividir un String en sub-Strings o tokens en base a uno o mas delimitadores.

Ejemplo de uso:

public class EjStringTokenizer {

public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new

InputStreamReader(System.in)); String unaLinea;

unaLinea = in.readLine();

StringTokenizer st = new StringTokenizer(unaLinea); while (st.hasMoreTokens()) {

System.out.println(st.nextToken()); }

} }

(16)

import java.io.*; E/S

import java.util.*; public class MaxTest{

public static void main( String args[ ] ){

BufferedReader in=new BufferedReader( new InputStreamReader( System.in) ); String unaLinea;

StringTokenizer str; int x, y;

System.out.println(“Introduzca 2 ints en una misma línea:” ) ; try{ unaLinea = in.readLine( ) ;

str = new StringTokenizer( unaLinea ) ; if( str.countTokens( ) != 2 ){

throw new NumberFormatException( ) ;} x = Integer.parseint( str.nextToken()) ; y = Integer.parseint( str.nextToken()) ;

System.out.println( "Max: " + Math.max( x,y)); }

catch( Exception e ){ System.err.println(“Error: se necesitan dos enteros" ) ; } }

}

(17)

E/S con Archivos

En Java las mismas operaciones que funcionan con la E/S por consola también funciona en la E/S con archivos.

Para trabajar con archivos construimos un objeto

BufferedReader, como lo hacíamos con la entrada por teclado, pero a partir de un objeto FileReader, como en el siguiente ejemplo:

FileReader elArchivo= new FileReader(“nombreArchivo”); BufferedReader lector = new BufferedReader(elArchivo); String unaLinea;

unaLinea = lector.readLine();

(18)

E/S con Archivos Ejemplo: Impresión en pantalla del contenido de un archivo

import java.io.*;

public class ContenidoFicheros {

public static void listarArchivo( String fileName ) { FileReader theFile;

BufferedReader fileIn = null; String oneLine;

System.out.println(“El Archivo: “+fileName+“ contiene:”); continua…

(19)

E/S con Archivos try {

theFile = new FileReader( fileName ); fileIn = new BufferedReader( theFile );

oneLine = fileIn.readLine( ); while(oneLine != null ) {

System.out.println( oneLine ); oneLine = fileIn.readLine( );} }

catch( Exception e )

{ System.out.println( e ); } finally{ // Cerramos el archivo if(fileIn != null )

fileIn.close( ); }

} continua…

(20)

E/S con Archivos

public static void main( String [ ] args ) { if( args.length == 0 )

System.out.println( "No files specified" ); for( int i = 0; i < args.length; i++ )

listFile( args[ i ] ); }

}

(21)

E/S con Archivos

Y para escribir caracteres en un archivo en Java utilizamos un objeto FileWriter y un objeto PrintWriter como en el siguiente ejemplo:

FileWriter elArchivo= new FileWriter (“nombreArchivo”); PrintWriter escritor= new PrintWriter (elArchivo);

escritor.println(“Lo que queremos escribir.”);

(22)

E/S con Archivos import java.io.*;

public class EscribeFichero{

public static void main(String[] args){ FileWriter fichero = null;

PrintWriter pw = null; try{

fichero = new FileWriter("C:/Users/Vale/Downloads/pruebaescri.txt");

pw = new PrintWriter(fichero);

for (int i = 0; i < 10; i++) { pw.println("Linea " + i); } } catch (Exception e) { e.printStackTrace();}

finally { try { // Nos asegurarnos que se cierra el archivo. if (null != fichero) { fichero.close(); }

} catch (Exception e2) { e2.printStackTrace(); } }

} }

(23)

public class AgregarTextoArchivo { E/S con Archivos public static void main(String[] args){

FileWriter fichero = null; PrintWriter pw = null; try{

fichero = new FileWriter("C:/Users/Vale/Downloads/pruebaescri.txt", true); pw = new PrintWriter(fichero);

pw.println("Linea agregada"); }

catch (Exception e) {

e.printStackTrace(); }

finally { try {

if (null != fichero) { fichero.close();}

} catch (Exception e2) { e2.printStackTrace();} }

} }

Referencias

Documento similar

&#34;No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

la cual, introducida en la función kemel de densidad espectral estimada posibilitará que el estimador resultante de S, sea una matriz semidefinida positiva. Esta