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