Xestión de erros e excepcións enfocada o uso de ficheiros

De MediaWiki
Ir a la navegación Ir a la búsqueda

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

1  try{
2     //Código que abre e trata o ficheiro
3  } catch (IOException ex){
4     //Código que trata o erro 
5  }

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:

1  public int methodThatCanThrow(params) throws IOException{
2  //Código que trata ficheiros pero non atrapa IOException
3  }

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.

 1 import java.io.*;
 2  public class SimpleExceptionHandling {
 3 	public static void main(String[] args) {
 4 		FileInputStream fileInputStream = null;
 5 		try {
 6 			fileInputStream = new FileInputStream("C:\\UnFicheiroTemporal");
 7  
 8 		} catch (FileNotFoundException e) {
 9 			System.out.println("Aconteceu a excepción  :: " + e.getMessage());
10 			System.out.println("Necesitamos pechar FileStream!");
11 		} finally {
12 			System.out.println("Afortunadamente pecharase neste bloque");
13 			try {
14 				if (fileInputStream != null) {
15 					fileInputStream.close();
16 				}
17 			} catch (IOException e) {
18 			}
19 		}
20 	}
21  }

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:

 1  private static void printFile() throws IOException {
 2 
 3     try(FileInputStream input = new FileInputStream("ficheiro.txt")) {
 4 
 5         int data = input.read();
 6         while(data != -1){
 7             System.out.print((char) data);
 8             data = input.read();
 9         }
10     }
11  }

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

Exercicios

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