Title: Presentacin de PowerPoint
1Errores en Tiempo de Compilación y de
Ejecución. Excepciones y Ficheros
Antonio S. Cofiño Universidad de
Cantabria antonio.cofino_at_unican.es
Java
Internet
http//departamentos.unican.es/macc/asignaturas/ja
va
2Excepciones. Sus tipos.
class Problemas public static void
main(String args) System.out.println("Hola\n"
) System.out.println(1/0) System.out.println
("Hola otra vez\n")
3Tratamiento de Excepciones
- Existen dos formas de responder a una excepción
- Construir un manipulador de excepciones
- El constructor tiene tres componentes básicas
- 1. El bloque try agrupa las sentencias que
pueden provocar una excepción - 2. El bloque o bloques catch manejador de la
excepción - 3. El bloque finally sólo obligatorio cuando
exista un bloque try sin su catch.
- Declararla y dejar que el método llamador sea el
encargado de tratarla - Si se quiere que un método declare excepciones
pero que no responda a ellas con el/los
correspondientes manipuladores, debe colocarse, a
continuación del nombre del método y de la lista
de sus argumentos, la palabra clave trhows
seguida de las excepciones. - No confundir throws y throw, este último se
utiliza para lanzar una excepción desde un
método, una vez que la ha capturado, por lo que
queda incluida en un catch.
4Métodos de la clase Throwable.
- fillInstackTrace( ) devuelve un objeto con los
métodos en ejecución en el momento de lanzarse la
excepción. - getMessage( ) devuelve el mensaje descriptivo
almacenado en una excepción. - printStackTrace( ) muestra por consola un
mensaje con la clase de excepción, el mensaje
descriptivo de la misma y una lista con los
métodos en ejecución en el momento de lanzarse la
excepción. - printStackTrace( PrintStream ps) envía el
mensaje anteriormente descrito al PrintStream que
se le especifique como parámetro. - printStackTrace( PrintWriter pw) envía el
mensaje anteriormente descrito al PrintWriter que
se le especifique como parámetro. - toString( ) devuelve una cadena descriptora de
la excepción.
5Lectura de ficheros
Fichero binario
x1 y1 x2 y2 NaN NaN x1 y1 ...
6Jerarquía de java.io Flujos de Entrada.
Una fuente de datos es cualquier objeto que puede
proveer informaciónun array de Java, un
fichero, teclado, etc.
- La clase más general, con variedad de
posibilidades es InputStream - Una clase especial para lectura de caracteres
Unicode (16bits) Reader
InputStream
- InputStream
- FilterInputStream (InputStream in)
- BufferedInputStream
- DataInputStream
- PushbackInputStream
- ByteArrayInputStream
- FileInputStream
- ObjectInputStream
- SequenceInputStream
- Reader
- BufferedReader (Reader in)
- LineNumberedReader
- CharArrayReader
- FilterReader
- PushbackReader
- InputStreamReader
- FileReader
- StringReader
DataInputStream
7Ejemplo de Lectura de Ficheros
DataInputStream (BufferedInputStream
(FileInputStream)) DataInputStream
(FileInputStream)
BufferedReader (FileReader)
StringTokenizer(str,",")
8Jerarquía de java.io Flujos de Salida.
- Dos Clases para Flujos de Datos, con variedad de
posibilidades InputStream y OutputStream - Dos Clases para caracteres Unicode (16bits) para
soportar internacionalización Reader y Writer
9Tratamiento de Excepciones en ficheros.
import java.io. class leefichero public
static void main (String args) int n0
double x,y try
DataInputStream dis disnew
DataInputStream(new FileInputStream("fronteras.bin
")) try
while (true)
xdis.readDouble()
ydis.readDouble()
System.out.println("( " x",
" y" )")
n
catch(EOFException e)
dis.close()
catch(IOException e)
e.printStackTrace() f
inally
System.out.println("Leidos "n" puntos")
10Leyendo del teclado
- System.in es un flujo orientado a bytes.
- InputStreamReader es un puente entre estos y los
flujos orientados a caracteres. - BufferedReader contiene el metodo readLine(), que
nos permite leer una linea de texto. - FileReader y FileWriter son subclases de
InputStreamReader y ambas admiten constructor
String con el nombre de un fichero.
import java.io. class LeerTeclado public
static void main(String args) throws
IOException System.out.print("gt")
InputStreamReader is new
InputStreamReader(System.in) BufferedReader
fis new BufferedReader(is) String
inputLinefis.readLine() fis.close()
OutputStreamWriter os new
OutputStreamWriter(System.out) BufferedWriter
fos new BufferedWriter(os)
fos.write(inputLine,0,inputLine.length())
fos.newLine() fos.close()
11Leyendo Strings de un fichero.
import java.io. class LeerFichero public
static void main(String args) throws
IOException String inputLine"Esto es una
prueba" FileWriter os new
FileWriter("Prueba.txt") BufferedWriter fos
new BufferedWriter(os) fos.write(inputLine,0
,inputLine.length()) fos.newLine()
fos.close() FileReader is new
FileReader("Prueba.txt") BufferedReader fis
new BufferedReader(is) String
leidofis.readLine() fis.close()
System.out.println("He leido de Prueba.txt
" leido)
- Además las clases DataInputStream y
DataOutputStream permiten leer y escribir
variables primitivas de JAVA, permitiendo
portabilidad entre plataformas. - La clase URL implementa un metodo llamado
openStream(), que nos permite abrir un URL, y
leer su contenido. - InputStream openStream()
- Este método puede ser usado desde un Applet.
12Aplicación para descomprimir archivos .zip
import java.util. import java.util.zip. import
java.io. public class UnzipApp public
static void main(String args) throws
IOException ZipFile f new
ZipFile(args0) Enumeration entradas
f.entries() System.out.println("Decomprimiendo"
args0" ...") while(entradas.hasMoreElemen
ts()) ZipEntry entrada (ZipEntry)
entradas.nextElement() System.out.println("
"entrada.getName()) InputStream in
f.getInputStream(entrada) FileOutputStream
fos new FileOutputStream(entrada.getName())
for(int chin.read()ch!-1chin.read()) fos.wr
ite(ch) fos.close() in.close()
f.close()
- Un archivo .zip, contiene un cjto de entradas que
corresponden con archivos comprimidos.
ZipFile.entries() y cada unos de estos ZipEntry
puede ser ser abierto como un InputStream,
getInputStream(), del cual podemos leer datos. - Tambien se pueden crear Archivos .zip.
- GZIPOutputStream y GZIPInputStream admite Salida
y Entrada de flujos comprimidos en formato GZIP
(.gz).