IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Redondance code chargement fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bouchette63
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut Redondance code chargement fichier
    Bonjour,

    Je viens vous demander quelques conseils de code

    Dans mon projet sous Eclipse, j'ai quatres classes qui procédent au chargement d'un même fichier properties. Ce dernier est chargé et utilisé seulement dans la fonction ActionForward de ces quatre classes. Je procède de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // On récupère le fichier de confuguration sur les droits
    Properties options = new Properties();
    File fichierConfig = new File(servlet.getServletContext().getRealPath("WEB-INF/conf/app-droits.properties"));
    options.load(new FileInputStream(fichierConfig));
    Est-ce que c'est la meilleur manière de procéder, c'est à dire charger le fichier à chaque passage dans la fonction (comme je fais), ou peut-on l'optimiser ?

    Merci pour votre aide

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    je ne suis pas un connaisseur, mais je pense que si le fichier est petit tu gagneras à le cahrger une seule fois pour toute.

    Par contre s'il est énorme et que tu ne t'en sers pas souvent, ton existant est peut être mieux.

    Ca dépend aussi de l'architecture de tes classes.

    bref, je pense qu'un pro (suivez mon regard ) te répondras assez rapidement

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par bouchette63
    Est-ce que c'est la meilleur manière de procéder, c'est à dire charger le fichier à chaque passage dans la fonction (comme je fais), ou peut-on l'optimiser ?
    Le plus gros problème pour moi c'est que tu ne fermes pas ton FileInputStream...

    Concernant la lecture si ton fichier est de petite taille ce n'est pas vraiment dérangeant car ce n'est pas énormément coûteux... mais tu pourrais utiliser le scope "application" pour y stocker ton Properties si tu ne veux pas avoir à le relire à chaque fois... par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class Config {
     
        public static final String PROPERTIES_KEY = "com.monsite.www.Properties";
     
        public static Properties getProperties(ServletContext application) throws IOException {
            Properties properties = null;
            // On recherche les properties dans le scope application
            Object object = application.getAttribute(PROPERTIES_KEY);
     
     
            if (object instanceof Properties) {
                // S'il s'agit bien d'un objet Properties,
                // on le récupère directement :
                properties = (Properties) object;
            } else {
                // Sinon on le charge depuis le fichier
                properties = new Properties();
                File fichierConfig = new File(application.getRealPath("WEB-INF/conf/app-droits.properties"));
                FileInputStream input = new FileInputStream(fichierConfig);
                try {
                    properties.load(input);
                } finally {
                    input.close();
                }
                // Et on le stocke dans le scope application
                // (pour les futurs appels)
                application.setAttribute(PROPERTIES_KEY, properties);
            }
            return properties;
        }
     
    }
    a++

  4. #4
    Membre éclairé Avatar de bouchette63
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut
    Merci pour ta réponse fouillée adiGuba
    Je vais regarder le scope "application" de plus près et le mettre en oeuvre.

  5. #5
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    il est aussi possible de stocker tes properties dans le web.xml (tag <context-param>) et de les recuperer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getInitParameter("name");
    en terme de performance, ca devrait être bien meilleur que de lire un fichier, et ca laisse le container gerer les properties.



    par contre, si tu veux rester comme tu es, je pense qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream input = getServletContext().getResourceAsStream("/WEB-INF/conf/app-droits.properties")
    est preferable a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File fichierConfig = new File(application.getRealPath("WEB-INF/conf/app-droits.properties"));
    FileInputStream input = new FileInputStream(fichierConfig);

  6. #6
    Membre éclairé Avatar de bouchette63
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut
    Oula merci à toi dude, mais maintenant je suis complétement perdu.
    Je ne sais pas lequel utilisé ?

    Personne ne sait quel est le plus performant pour un petit fichier properties ???

    Merci

    Edit : je vais choisir par moi-même, ne vous traquassez pas la tête

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouchette63
    Oula merci à toi dude, mais maintenant je suis complétement perdu.
    Je ne sais pas lequel utilisé ?
    getInitParameter() ne permet pas de lire un fichier properties, mais de lire des propriétées qui sont stocké dans ton web.xml... Je ne te le recommande que si tu as un très petit nombre de valeur à utiliser...


    Concernant getRessourceAsStream(), ce n'est qu'un moyen plus simple et plus propre d'ouvrir un fichier dans le projet Web. Donc tu peux très bien l'utiliser...

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/10/2006, 18h27
  2. [Upload] un bug ds un code de fichiers
    Par jack_1981 dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2005, 12h44
  3. chargement fichier bizarre
    Par jiceher dans le forum C++
    Réponses: 14
    Dernier message: 28/08/2005, 14h52
  4. Chargement fichier volumineux
    Par kirsoul dans le forum Installation
    Réponses: 2
    Dernier message: 26/07/2005, 14h53
  5. [Plugin][Jar] Chargement fichier de conf d'un jar
    Par vberetti dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 29/06/2005, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo