segunda-feira, agosto 16, 2010

Java 7: Automatic Resource Management

A partir do Java 7 build 105 (disponível em http://download.java.net/jdk7/ ) é possível escrever código que feche automaticamente alguns tipos de recursos, como arquivos. A classe deve implementar a interface AutoCloseable.
Para a especificação, consulte http://blogs.sun.com/darcy/entry/project_coin_updated_arm_spec
Exemplo:
import java.io.*;

class TesteTryWithResources {
    public static void main (String[] args) {
        // Exemplo simples
        try (PrintWriter pw = new PrintWriter ("test.txt")) {
            pw.println ("Hello, world!");
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }

        // Exemplo um pouco mais complexo, que
        // envolve 2 arquivos
        try (BufferedOutputStream bos = new BufferedOutputStream (
                new FileOutputStream ("copy.of.file"));
             BufferedInputStream bis = new BufferedInputStream (
                new FileInputStream ("original.file"))) {
            byte[] buffer = new byte[10240];
            for (int nBytes = bis.read (buffer); nBytes > 0;
                    nBytes = bis.read (buffer)) {
                bos.write (buffer, 0, nBytes); 
            }
        } catch (final FileNotFoundException | IOException ex) {
            ex.printStackTrace();
        }
    }
}