0 votes

Un OpenIDE FileObject doit-il être fermé après sa création ?

Lors de la création de modules sur la plate-forme NetBeans, l'option FileObject représente un fichier dans le système de fichiers virtuel de l'IDE. La création d'un nouveau FileObject est simple, mais est-ce que NetBeans contrôle complètement la référence à l'image réelle de l'utilisateur ? File ou dois-je fermer FileObject moi-même ? Mon code est le suivant :

FileObject appRoot = FileUtil.getConfigRoot().getFileObject("myapp");

try {
    FileObject fo = servers.createData(filename);
    fo.setAttribute("name", "a name");
    fo.setAttribute("desc", "a description");
} catch (IOException ex) {
   throws new FileCreationException("Could not create file " + filename, ex);            
}

Avec le code ci-dessus, est-ce que je laisse ouvertes des références au fichier réel ou est-ce que je dois obtenir l'option OutputStream de la FileObject et le fermer manuellement ?

Merci.

1voto

Après avoir fouillé dans l'API et le code source de NetBeans, je pense avoir trouvé la réponse à ma propre question.

Les attributs tels que définis ci-dessus sont stockés dans un fichier d'attributs spéciaux. Chaque dossier du système de fichiers virtuel possède un fichier d'attributs caché ( .nbattrs ) qui contient les attributs stockés pour chaque FileObject par exemple

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN"     
                            "http://www.netbeans.org/dtds/attributes-1_0.dtd">
<attributes version="1.0">
    <fileobject name="dk-i2m-netbeans-smtpdummyservice-mailserver-1244831819713">
        <attr name="name" stringvalue="My test"/>
        <attr name="desc" intvalue="Server for testing outgoing e-mails"/>
    </fileobject>
</attributes>

Ce fichier est entièrement contrôlé par NetBeans et aucune ouverture ou fermeture de flux d'entrée/sortie n'est nécessaire.

Si, toutefois, vous souhaitez ajouter du contenu à la rubrique FileObject et non de simples attributs, vous devrez le faire à la manière habituelle de Java, en utilisant la balise InputStream y OutputStream de la FileObject (les deux ont un getter et un setter) et n'oubliez pas de fermer les flux en conséquence. ex.

FileObject appRoot = FileUtil.getConfigRoot().getFileObject("myapp");

try {
    FileObject fo = servers.createData(filename);
    fo.setAttribute("name", "a name");
    fo.setAttribute("desc", "a description");

    // Lock the FileObject before writing
    FileLock lock;
    try {
        lock = fo.lock();
    } catch (FileAlreadyLockedException ex) {
        Exceptions.printStackTrace(ex);
        return;
    }

    try {
        OutputStream out = fo.getOutputStream(lock);
        try {
            // Write into the output stream
        } finally {
            // Remember to close the stream
            out.close();
        }
    } finally {
        lock.releaseLock();
    }
} catch (IOException ex) {
    throws new FileCreationException("Could not create file " + filename, ex);            
}

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