Java 7. try-catch AutoCloseable
Descripción
En Java 7 podemos hacer uso de bloques try-catch sin necesidad de escribir código destinado a cerrar flujos.Ejemplo:
String fileName = "miFile.txt"; String fileOut = "fileOut.txt"; // Copiar un archivo en otro try (OutputStream os = new FileOutputStream(fileOut); InputStream is = new FileInputStream(fileName);) { byte[] buf = new byte[4096]; int len; while ((len = is.read(buf)) > 0) { os.write(buf, 0, len); } } catch (IOException ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, "tryCatch() : copiar archivo", ex); }
Hay que tener en cuenta que no todo el código se cerrará bien, por ejemplo:
// El siguiente código no se cerrará bien, ya que uno de los // objetos (FileReader) no se almacena en una variable. try (BufferedReader br = new BufferedReader(new FileReader(fileName));) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, "tryCatch() : leer archivo", ex); }
Para que se cierre correctamente habría que hacer:
// Para que se cierre correctamente habría que almacenar cada objeto // en una variable try (FileReader fileReader = new FileReader(fileName); BufferedReader br = new BufferedReader(fileReader);) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, "tryCatch() : leer archivo", ex); }
Los flujos que se auto cierran implementan la interface AutoCloseable. La interface Closeable hereda de AutoCloseable.
public interface Closeable extends AutoCloseable { public void close() throws IOException; }
Comentarios
Publicar un comentario