Java Language Fermeture des cours d'eau


Exemple

La plupart des flux doivent être fermés lorsque vous en avez terminé, sinon vous pourriez introduire une fuite de mémoire ou laisser un fichier ouvert. Il est important que les flux soient fermés même si une exception est levée.

Java SE 7
try(FileWriter fw = new FileWriter("outfilename");
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //handle this however you 
}

N'oubliez pas: try-with-resources garantit que les ressources ont été fermées à la sortie du bloc, que cela se produise avec le flux de contrôle habituel ou à cause d'une exception.

Java SE 6

Parfois, try-with-resources n'est pas une option, ou vous supportez peut-être une version antérieure de Java 6 ou antérieure. Dans ce cas, la manipulation est d'utiliser un finally bloc:

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt");
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //handle this however you want
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //typically not much you can do here...
    }
}

Notez que la fermeture d'un flux d'encapsuleur fermera également son flux sous-jacent. Cela signifie que vous ne pouvez pas envelopper un flux, fermer le wrapper, puis continuer à utiliser le flux d'origine.