Xestión de erros e excepcións enfocada o uso de ficheiros
Xestión de erros e excepcións
Non debe ser o tratamento de excepcións o tema central das explicacións para a xestión de ficheiros. Con todo, xa que o seu tratamento será preciso, faremos unha breve exposición simplificada das diversas posilibadaes para capturas os erros.
try-catch
O código que manipule ficheiros poderá ter a seguinte estrutura
try{
//Código que abre e trata o ficheiro
} catch (IOException ex){
//Código que trata o erro
}
https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html
throws
Se no canto de tratar o erro nos queremos indicar que o noso método pode lanzar excepcións:
public int methodThatCanThrow(params) throws IOException{
//Código que trata ficheiros pero non atrapa IOException
}
finally
O bloque finally contén código importante que será executado indistintamente de que salte unha excepción ou non. No caso de ficheiros, será habitual incluir neste bloque o peche do stream, para asegurar que todas os ficheiros abertos son pechados apropiadamente; e así, os datos dos ficheiros non se poderán corromper.
import java.io.*;
public class SimpleExceptionHandling {
public static void main(String[] args) { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream("C:\\UnFicheiroTemporal");
} catch (FileNotFoundException e) { System.out.println("Aconteceu a excepción :: " + e.getMessage()); System.out.println("Necesitamos pechar FileStream!"); } finally { System.out.println("Afortunadamente pecharase neste bloque"); try { if (fileInputStream != null) { fileInputStream.close(); } } catch (IOException e) { } } }
}
Saída:
Aconteceu a expeción :: C:\UnFicheiroTemporal (The system cannot find the file specified) Necesitamos pechar FileStream! Afortunadamente pecharase neste bloque
E importante remarcar que o finally tamén se executaría no caso de non terse producida a excepción.
https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html https://www.geeksforgeeks.org/why-you-need-to-close-the-java-streams-in-finally-block/
try-with-resources
Mecanismo que automáticamente pecha recursos (pode ser máis de un) cando se acabou o seu traballo con eles.
Por exemplo:
private static void printFile() throws IOException {
try(FileInputStream input = new FileInputStream("ficheiro.txt")) {
int data = input.read();
while(data != -1){
System.out.print((char) data);
data = input.read();
}
}
}
Neste exemplo ábrese un FileInputStream dentro dun bloque a try-with-resources block, lee datos do FileInputStream, e pechao automaticamente cando a execución sae do bloque. Isto último e posible porque FileInputStream implementa a interface java.lang.AutoCloseable.
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html http://tutorials.jenkov.com/java-exception-handling/try-with-resources.html
Exercicio para adaptar código para a xestión correcta de recursos e excepcións.
Un apartado →https://jesusfernandeztoledo.com/ejercicios-resueltos-ficheros-en-java/ Otro apartado de adaptar un código que quieras a try -with-resources Y último: pag 27 sin excepciones y que se pongan. Sol→ https://www.unirioja.es/cu/jearansa/0910/archivos/EIPR_Tema05.pdf