2 votes

Java Essai Avec Ressources Ne Fonctionne Pas Pour Affectation?

D'accord, donc je viens d'écrire une petite classe et j'ai essayé d'utiliser le try avec des ressources au lieu de la méthode try-catch-finally (que je déteste faire) et je reçois toujours l'erreur "Début de type illégal". Je me suis ensuite tourné vers la section Didacticiels Java à ce sujet: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html et il a montré que vous pouvez assigner une nouvelle variable entre les parenthèses. Je ne suis pas sûr de ce qui se passe.

private static final class EncryptedWriter {

    private final Path filePath;
    private FileOutputStream outputStream;
    private FileInputStream inputStream;

    public EncryptedWriter(Path filePath) {
        if (filePath == null) {
            this.filePath = Paths.get(EncryptionDriver.RESOURCE_FOLDER.toString(), "Encrypted.dat");
        } else {
            this.filePath = filePath;
        }
    }

    public void write(byte[] data) {
        try (this.outputStream = new FileOutputStream(this.filePath.toFile())){

        }   catch (FileNotFoundException ex) {
            Logger.getLogger(EncryptionDriver.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

12voto

Rohit Jain Points 90368

Ce n'est pas ainsi que fonctionnent les try-with-resources. Vous devez déclarer le OutputStream uniquement à cet endroit. Donc, cela fonctionnerait:

try (FileOutputStream outputStream = new FileOutputStream(this.filePath.toFile())){

Le but même du try-with-resources est de gérer la ressource elle-même. Ils ont pour tâche d'initialiser la ressource dont ils ont besoin, puis de la fermer lorsque l'exécution quitte la portée. Ainsi, il n'a pas de sens d'utiliser la ressource déclarée ailleurs. Parce qu'il ne serait pas correct de fermer la ressource qu'il n'a pas ouverte, et alors le problème avec l'ancien try-catch est de retour.

La toute première ligne de ce tutoriel dit clairement cette chose:

La déclaration de l'instruction try-with-resources est une instruction try qui déclare une ou plusieurs ressources.

... et déclaration est différent de initialisation ou assignation.

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