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

Entrée/Sortie Java Discussion :

Stockage de beaucoup de données par section et clef en un seul fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Stockage de beaucoup de données par section et clef en un seul fichier
    Bonjour,
    Je viens vous posé une question à propos des stockages de nombreuses données sous un seul fichier.
    Afin d'illustrée mon idée, à programmer plus tard, je me doit de charger des points qui seront situer au dessus d'une image dite "MAP". Chaque point a alors un nom de point, une coordonnée en x (vertical) et y (horisontale), un nom effectif, un descriptif (qui peut être long d'au moins 100 lignes avec retours de lignes).
    Comme je compte repéré par un nom chaque point, j'aurais pu, à l'image d'un fichier .ini faire ceci:
    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
     
    [Point1]
    NomEffectif=Le magasin de toto
    PointX=21
    PointY=12
    Descriptif=Le magasin de toto vend des armes à tout voyageurs.\n Epée de jade : 20 Pièces d'or \n Epée de fer : 5 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
     
    [Point2]
    NomEffectif=Le magasin de titi
    PointX=11
    PointY=32
    Descriptif=Le magasin de titi vend des sacs sans fond à tout voyageurs.\n Sac sans fond bleu : 50 Pièces d'or \n Sac de lin de fer : 6 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
     
    [Point3]
    NomEffectif=Le magasin de victor
    PointX=15
    PointY=33
    Descriptif=Le magasin de victor vend des viandes à tout voyageurs.\n Viandes sèches. Restaure 50 Points de vies : 11 Pièces d'or \n Bonbon de luxe. Restaure 50 Points de vies et 50 Points de mana : 100 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
    Comme on peut le voir j'ai beaucoup de données à traiter. Mon souci principal est de savoir si le fichier .ini correspondrais à ce genre de système et si il peut prendre plus de 100 lignes longues avec des sauts de lignes.

    En plus de cela, comment implémenté un tel fichier si un jour je me retrouve à supprimer, pour l'exemple, la section 2?
    Le programme sera t il en mesure de ne pas s'arrêter en cherchant une suite logique de section ?
    Enfin pour terminer, je m'interroge sur la portabilité entre programme car ce fichier est destiné à être téléchargé pour être lue dans un autre programme client.

    Le cas échéant quel autre méthode, implémentation je peux recourir pour effectuer cette tâche sans que cela ne rame trop, ni que ça nuise à la stabilité de mes programmes futurs.

    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    En Java on fait souvent recours aux fichiers properties avec la classe Properties associée.
    Tu pourrais simuler la struicture du ini de la manière suivante:
    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
     
    Point1.NomEffectif=Le magasin de toto
    Point1.PointX=21
    Point1.PointY=12
    Point1.Descriptif=Le magasin de toto vend des armes à tout voyageurs.\n Epée de jade : 20 Pièces d'or \n Epée de fer : 5 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
     
    Point2.NomEffectif=Le magasin de titi
    Point2.PointX=11
    Point2.PointY=32
    Point2.Descriptif=Le magasin de titi vend des sacs sans fond à tout voyageurs.\n Sac sans fond bleu : 50 Pièces d'or \n Sac de lin de fer : 6 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
     
    Point3.NomEffectif=Le magasin de victor
    Point3.PointX=15
    Point3.PointY=33
    Point3.Descriptif=Le magasin de victor vend des viandes à tout voyageurs.\n Viandes sèches. Restaure 50 Points de vies : 11 Pièces d'or \n Bonbon de luxe. Restaure 50 Points de vies et 50 Points de mana : 100 Pièces d'or \n ..... on implémente une suite... jusqu'à 100 lignes.
    A plus

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Je te remercie pour la réponse George 7 mais n'étant pas un foudre de guerre dans la langue de Shakespeare, j'ai du mal à saisir comment Propreties fonctionne. De plus, je ne voie pas comment cela va se comporté si je retire la section Point2.
    Le programme plantera-t-il ou sera-t-il en mesure de continuer?

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si tu supprimes les lignes avec "Point2" au début, ils ne seront pas chargés dans ta Map. Après savoir si ça plantera ou pas, ça c'est dans ton programme que tu le gères, je n'ai aucune idée de ce que tu fais de ces données et si tu testes en dur ce qui existe ou pas. Bref, je peux pas te dire.
    Utiliser Properties est plus que simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // va contenir les valeurs
    Properties prop = new Properties();
    // le fichier à charger
    InputStream in = new FileInputStream("/chemin/vers/mon/fichier.properties");
    // on charge le fichier
    prop.load(in);
    // accès à une valeur
    prop.getProperty("Point2.PointX");
    Bon là je ne gère pas les flux dasn cet exemple, à toi de le faire proprement.
    Tu peux ensuite ajouter des valeurs avec setProperty, et enregistrer avec store.
    Pour l'Anglais, il va falloir t'y faire car la javadoc est une source indispensable pour faire du Java, et elle existe qu'en Anglais (et en Japonais si tu préfères )

    A plus

  5. #5
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    En fait le fichier, généré avec Properties, doit vivre. C'est à dire que sur ma carte, si je fais un click droit, j'ai un popup menu qui apparait avec -> Créer un nouveau point. Si je le crée, alors deux choses peuvent être possible.
    -Soit le fichier n'existe pas, on créera le premier point Point1.
    -Soit le fichier existe et on procèdera à l'ouverture du dernier point+1. Metons que mon dernier point soit Point3, il faudra créer Point4.

    Je coupe mon programme. Si je le rallume, j'ouvre le fichier créer avec Properties puis je prend le premier point -> Point1, je crée le point depuis les données, à la fin je passe au point2 (Point2n'estrpasprésent car détruit précédemment), il faut passé au point suivant.

    D'où ma question au sujet du gros fichier et de sa méthode d'accès / utilisation.
    D'où aussi mon autre question sur la meilleurs manière de faire et géré un fichier exportable servant de base de point.


    Quand à l'Anglais, j'arrive a comprendre un peu, mais c'est loin d'être mon truc. Je ne suis pas doué pour les langues parlés. Donc je ferais avec, et au pire je poserais des questions. Nulle questions n'est idiotes, et c'est en demandant que l'on avance, me semble-t-il.

    Cordialement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je ne critiquais pas ton anglais, t'inquiète, j'ai mis du temps à m'y mettre aussi, juste que ça te servira énormément de pouvoir gérer la javadoc

    Sinon je pense que lorsque tu charges, tu ne devrais pas faire : last + 1
    J'ai utilisé quelque chose de ce genre, et j'ai bricolé une méthode qui retourne des sous Properties pour chaque bloc présent. par exemple une instance de Properties pour Point1, puis une pour Point2 etc etc...
    Sinon tu peux faire plus simple :
    • Tu sauvegardes lastUsed dans ton fichier properties et tu commences par le charger et par en faire un entier
    • Tester "Point<i>.*"
      • Si ça existe alors charger le point
      • Si ça n'existe pas, incrémenter <i> et continuer jusqu'à lastUsed

    ça devrait le faire

  7. #7
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Effectivement, j'avais lue un ou deux post sur cette méthode et je te remerci de l'intérêt que tu porte à ma demande. Toutefois, au risque de pasé pour un bricoleur du dimanche, je pense que je vais m'orenté sur la méthode qui suit.

    1) Charger le fichier Points.ini en mémoire et affecter les points.
    2) Lors de la suppression d'un point, on dé place le fichier qui sera placé en Points.ini.back (A ce sujet, si un fichier Points.ini.back existe, le supprimer, ou le vider selon...)
    3) Créer un nouveau fichier Point.ini en partant du haut à gauche vers le bas à droite en affectant à Point + n ou n est incrémenté de 1 pour chaque point.

    C'est la méthode la plus propre que je connaise pour garantir un fichier à la longue lisible.

    Qu'en pensez-vous ?
    Cordialement

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Sinon, pour les propriétés hierarchiques comme çà, tu as commons-configuration, une petite librairie de jakarta bien utile. Elle support plein de format de fichier (dont le format ini) et pour une partie d'entre eux supporte une structure hierarchique. Elle permet de resauver facilement le ficheir après modification et, contrairement à java.util.Properties, ne mélange pas tout dans le fichier quand tu sauve


    tu trouvera de la doc à ce sujet ici:
    http://commons.apache.org/configurat...ser_guide.html

  9. #9
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Merci de cette indication tchize_, mais cela suppose-t-il d'embarquer dans le programme apache ?
    Si oui, quel en est la conséquence sur le logiciel client ?
    Si oui, cela ne risque-t-il pas de nuire au portage sous différentes plateformes?

    Je m'interroge

    Cordialement

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ne confond pas tous les projet fait sous la banniere apache et son produit le plus connu "apache httpd"
    Il s'agis ici d'un toute petie librairie d'une 100aine de k entièrement en java, avec éventuellement des dépendances à d'autres librairies java (j'ai pas vérifié).

    En terme de distribution, la seule contrainte c'est de respecter la licence apache qui t'oblige à mentionner dans ta distribution, de manière claire, que tu utilise des librairies sous licence apache. J'ai déjà vu des projet commerciaux qui utilisent des librairies apache, en gros y a un page de garde dans la doc qui dit "on utilise le librairies x,y,z fournies par la apache software fondation, dont la licence se trouve en annexe" et y a une copie de la licence en annexe ^^

  11. #11
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ne confond pas tous les projet fait sous la banniere apache et son produit le plus connu "apache httpd"
    Ok j'ai mal compris d'ou ma confusion.

    Il s'agis ici d'un toute petie librairie d'une 100aine de k entièrement en java, avec éventuellement des dépendances à d'autres librairies java (j'ai pas vérifié).

    Citation Envoyé par tchize_ Voir le message
    En terme de distribution, la seule contrainte c'est de respecter la licence apache qui t'oblige à mentionner dans ta distribution, de manière claire, que tu utilise des librairies sous licence apache. J'ai déjà vu des projet commerciaux qui utilisent des librairies apache, en gros y a un page de garde dans la doc qui dit "on utilise le librairies x,y,z fournies par la apache software fondation, dont la licence se trouve en annexe" et y a une copie de la licence en annexe ^^
    Ok sur le principe mais je suis partisan de tout faire moi même. C'est une façon que j'usite beaucoup pour apprendre, ce qui est mon but premier.

    Ceci dit, je ne rejette pas totalement ta réponse tchize_ car elle me démontre une notion que je n'avais pas prise en compte dans mon projet. Celle d'utiliser des composants externes dédié.

    Toutefois je préférerais faire mes propres classes de gestions de fichiers. Le tout est que je trouve une bonne méthode pour le faire correctement. C'est d'ailleurs le but de mon post vue la foison de possibilités existantes pour le faire.

    Cordialement

  12. #12
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Bonjour,
    Je reprend mon post pour essayer de faire fonctionner un petit bout de programme.
    Je me suis servis de l'exemple que ma donné par George7 pour essayer de l'inclure dans une classe qui me servira à la création de fichier properties, la modification d'une donnée, la suppression d'une clé, la lecture d'une donnée à partir d'une section et d'une clef.

    La première question que je me pose: Est est-ce qu'il faut que je face une classe qui sera accessible à chaque fois que j'en aurais besoin dans mon projet ou faut-il a chaque fois tout se retaper à chaque fois que j'ai besoin d'utiliser mon fichier properties?
    Dans le cas ou je fais une classe, sera-t-elle exportable sans d'autres programme ?
    Enfin, dernière question, est-ce que je peux utiliser l'encapsulation afin d'être plus juste quand à leurs utilisation?

    Merci pour vos indications.
    Cordialement

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    le mieux c'est de faire un classe qui gère ton fichier. Tu pourra ainsi passer l'instance de méthode en méthode quand c'est nécessaire, tu centralise le code de gestion du fichier, bref c'est de la programmation objet. Pour l'exporter dans d'autres projet par la suite, aucun soucis, suffira d'extaire la classe et soit la mettre dans le nouveau projet, soit la mettre dans une librairie commune.


    Je comprend pas trop ta question sur l'encapsulation.

  14. #14
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Et bien, si je fait une classe private, j'encapsule et ainsi je me retrouve avec une classe immuable, donc avec peu de risque de la voir modifier.

    Ceci dit voila ce que j'ai commencer à faire.
    GestionProp.java
    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
     
     
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Properties;
     
    public class GestionProp {
        /*
         * Pour un fichier stocker sous (urlFichier)
         * Contient (Section.Cle=Donnee)
         * */
        public void newfichierProp(String urlFichier, String Section, String Cle, String Donnee) {
            Properties Prop = new Properties();
            InputStream in = new FileInputStream(urlFichier);
            Prop.load(in);
            Prop.getProperty(Section +"."+ Cle +" = "+ Donnee);
        }
    }
    Ceci dit ca coince, je suppose qu'il faut que j'inclue un try/catch et ensuite que je face un système de vérification d'url. Soit le fichier est présent, on inscrit Section.Cle = Donnee
    Soi le fichier n'existe pas et on crée ce dossier avec à l'intérieur Section.Cle = Donnee

    Bon en même temps je m'apprend.
    Cordialement

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    je pencherais plutot pour une classe qui prend un nom de fichier dans son consructeur et qui contiendrais des méthodes comme getSections(), getSection(name), get(section,cle), save(), reload(), etc

  16. #16
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Je voie.
    Alors si je m'y prend comme dit tchize_, a ce moment la est-ce que cela ne va pas faire doublon avec ce qui existe déjà dans la partie io.java?
    Ensuite je voulais englober directement les mises en forme pour correspondre à ceci.

    String -> sauvegarde -> String
    String -> sauvegarde -> int
    int -> sauvegarde -> int


    String -> lire fichier -> String
    String -> lire fichier -> int
    int -> slire fichier -> int

    Bon ce qui fait que ma classe doit aussi prendre en compte des erreurs et donc des try / catch.
    Comment je pourrais m'y prendre pour l'inclure ?
    Comment je pourrais aussi faire un test de présence de fichier? De cette façon si le fichier n'existe pas, on va le créer.
    Enfin, comment faire pour que chaque nouvelle clef, soit mise ligne par ligne ?

    Cordialement.

  17. #17
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je pencherais plutot pour une classe qui prend un nom de fichier dans son consructeur et qui contiendrais des méthodes comme getSections(), getSection(name), get(section,cle), save(), reload(), etc
    Pour reprendre ce qui est cité dessus, je propose le début de classe suivante:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Properties;
     
    public class GestionProp {
        //Charge l'url du fichier, son nom et son extension dans une vaiable privée
        public void getPropUrl(String urlFichier) {
            this.urlFichier = urlFichier;
        }
        //Charge la section dans une variable privée
        public void getPropSection(String Section) {
            this.Section = Section;
        }
        //Charge la clef dans une variable privée
        public void getPropCle(String Cle) {
            this.Cle = Cle;
        }
        //Charge la donnée à traiter dans une variable privée
        public void getPropDonnee(String Donnee) {
            this.Donnee = Donnee;
        }
        /*
         * Gère l'enregistrement d'un fichier properie avec:
         * son emplacement -> urlFichier
         * et Section.Cle = Donnee
         * */
        public void setPropFichier() {
            Properties PropFichier = new Properties();
            InputStream DansPropFichier = new FileInputStream(urlFichier);
            PropFichier.load(DansPropFichier);
            PropFichier.getProperty(Cle + "." + Section, Donnee);
            try {
                //Si le fichier existe, ok on enregistre
            }
            catch {
                //Si le fichier n'existe pas, on crée alors e fichier
            }
        }
        private String urlFichier, Section, Cle, Donnee;
    }
    Par contre j'ai besoin de gérer les exceptions mais je ne sait pas trop comment. Quelqu'un aurait-il une idée pour que je puis le faire correctement?

    D'avance, merci.

  18. #18
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Après quelques recherches, j'en suis arrivé à ce bout de code qui loque encore
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Properties;
     
    public class GestionProp {
        //Charge l'url du fichier, son nom et son extension dans une vaiable privée
        public void setPropUrl(String urlFichier) {
            this.urlFichier = urlFichier;
        }
        //Charge la section dans une variable privée
        public void setPropSection(String Section) {
            this.Section = Section;
        }
        //Charge la clef dans une variable privée
        public void setPropCle(String Cle) {
            this.Cle = Cle;
        }
        //Charge la donnée à traiter dans une variable privée
        public void setPropDonnee(String Donnee) {
            this.Donnee = Donnee;
        }
        /*
         * Gère l'enregistrement d'un fichier properie avec:
         * son emplacement -> urlFichier
         * et Section.Cle = Donnee
         * */
        public void setPropFichier() {
            Properties PropFichier = new Properties();
            try {
                InputStream DansPropFichier = new FileInputStream(urlFichier);
                PropFichier.load(DansPropFichier);
                PropFichier.getProperty(Cle + "." + Section, Donnee);
            }
            catch (java.io.FileNotFoundException) {
                //Si le fichier n'existe pas, on crée alors le fichier
            }
            catch (java.io.IOException){
                //Si la section ou la clef n'existe pas
            }
        }
        private String urlFichier, Section, Cle, Donnee;
    }
    Une idée pour réaliser tout les traitement d'exception ?
    Cordialement

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    pourquoi tu veux faire une instance de ta classe pour chaque propriété? Enfin c'est comme ça que je la lit parce qu'elle est assez hésitante come classe. Elle a des getter qui sont de type void , des setter qui ne prennent pas de paramètre et il n'y a pas de code pour lire tes données.

    Une instance globale "configuration" qui permettrait d'accéder à tout suffirait. Exemple rapide et incomplet de structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Configuration {
        private File configurationFile;
        private Properties properties;    
        public Configuration(File fichier){
           // lire le fichier dans properties, si le fichier est vide, créer un properties vide
        }
        public String getValeur(String section, String cle){
            return properties.get(section+"."+cle);
        }
        public void setValeur(String section, String cle, String valeur){
            properties.set(section+"."+cle,valeur);
        }
        public Section getSection(String section){return new Section(this,section);}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Section {
        private Configuration configuration;
        private String nomSection;
        public Section(Configuration configuration, String nomSection){
            this.configuration = configuration;
            this.nomSection = nomSection;
        }
        public String getValeur(String cle){return configuration.getValeur(nomSection,cle);}
        public void  setValeur(String cle, String valeur) {configuration.setValeur(nomSection,cle,valeur);}
    }
    Quand aux exception, ben si le fichier existe pas, le properties est vide et le fichier sera créé à la sauvegarde. Il faudrait aussi probablement coder une méthode qui retourne la liste des sections.

    N'hésite pas à regarder l'api de commons-configuartion. Car même si tu ne l'utilise pas, l'api de l'interface "Configuration" te donne une bonne idée de comment implémenter une configuration (Et regarde aussi la méthode subSet, qui traite justement de tes sections )

  20. #20
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Je croi que je peux tout reprendre à 0
    Une chose cependant n'est pas très clair dans mon esprit. Un setter, un getter, quel différence ? Ensuite il est question de prendre des paramètres. Donc si je reprend a 0, pourquoi pas avoir certaines données partageable par l'enssemble de la classe.

    L'Url est commune, La section, la clef aussi si on tiens compte du fait que si je crée, modifie et supprime une section et/ou une clef.

    Donc je retourne planché avec ces indications mais je doute fort que j'arrive à quelque chose de concluent.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2015, 16h17
  2. Réponses: 2
    Dernier message: 08/02/2010, 17h29
  3. [Stratégie] Stockage de données par utilisateur (mais pas en HttpSession)
    Par Ougha dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 16/05/2007, 13h42
  4. Réponses: 9
    Dernier message: 17/04/2004, 16h32
  5. [Choix SGBD] Application mono-poste mais beaucoup de données
    Par Wavyx dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/03/2003, 18h24

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