172 votes

implémente Closeable ou implémente AutoCloseable

Je suis en train d'apprendre Java et je n'arrive pas à trouver une bonne explication sur le site de la Commission européenne. implements Closeable y el implements AutoCloseable interfaces.

Lorsque j'ai mis en place un interface Closeable Dans mon IDE Eclipse, j'ai créé une méthode public void close() throws IOException .

Je peux fermer le flux en utilisant pw.close(); sans l'interface. Mais, je n'arrive pas à comprendre comment je peux implémenter l'interface close() en utilisant l'interface. Et, quel est le but de cette interface ?

J'aimerais également savoir : comment puis-je vérifier si IOstream était vraiment fermée ?

J'utilisais le code de base ci-dessous

import java.io.*;

public class IOtest implements AutoCloseable {

public static void main(String[] args) throws IOException  {

    File file = new File("C:\\test.txt");
    PrintWriter pw = new PrintWriter(file);

    System.out.println("file has been created");

    pw.println("file has been created");

}

@Override
public void close() throws IOException {

}

7voto

inder Points 275

En try-with-resources Déclaration.

En try-with-resources statement est un try qui déclare une ou plusieurs ressources. A resource est un objet qui doit être fermé après que le programme en ait terminé avec lui. Le site try-with-resources statement garantit que chaque ressource est fermée à la fin de la déclaration. Tout objet qui implémente java.lang.AutoCloseable qui comprend tous les objets qui implémentent java.io.Closeable peut être utilisé comme une ressource.

L'exemple suivant lit la première ligne d'un fichier. Il utilise une instance de BufferedReader pour lire les données du fichier. BufferedReader est une ressource qui doit être fermée après que le programme ait fini de l'utiliser :

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
                   new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

Dans cet exemple, la ressource déclarée dans l'instruction try-with-resources est un BufferedReader. L'instruction de déclaration apparaît entre parenthèses, immédiatement après le mot clé try. La classe BufferedReader dans Java SE 7 et plus, implémente l'interface java.lang.AutoCloseable . Parce que le BufferedReader est déclarée dans une instruction try-with-resource, elle sera fermée, que l'instruction try se termine normalement ou brusquement (à la suite de la méthode BufferedReader.readLine en lançant un IOException ).

Avant Java SE 7, vous pouvez utiliser un fichier finally pour s'assurer qu'une ressource est fermée, que l'instruction try se termine normalement ou brusquement. L'exemple suivant utilise un bloc finally au lieu d'un bloc try-with-resources déclaration :

static String readFirstLineFromFileWithFinallyBlock(String path)
                                                     throws IOException {
    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
        return br.readLine();
    } finally {
        if (br != null) br.close();
    }

}

S'il vous plaît se référer à la documentation .

-1voto

user3201264 Points 1

Faites une chose : écrivez une déclaration de console o/p explicitement dans la méthode close. Dans une autre classe, faites un try-with-resource, c'est-à-dire créez une instance de votre ressource et mettez-la dans la clause de déclaration try-with-resource.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X