[XML] stocker les preferences de mon appli

stocker les preferences de mon appli [XML] - Java - Programmation

Marsh Posté le 15-01-2004 à 12:18:27    

Bonjour
 
Je suis débutant en XML.  
 
J'ai une appli java qui necessite des preferences que je souhaiterait stocker dans un fichier XML : prefs.xml pour ne pas le citer.
 
 
En clair quand je vais dans le menu "preferences" ben ca met a jour mon fichier XML
 
Sachant que je n'aurais que 3 ou 4 parametre a gerer (style un booleen, un chemin de fichier...), croyez vous que XML soit bien adpaté pour mon cas ou vaut il mieux faire ca a la methode "classique" (une classe Préferences avec des attributs comme support de stockage) ?
 
 
Merci :)  
 
 
 

Reply

Marsh Posté le 15-01-2004 à 12:18:27   

Reply

Marsh Posté le 15-01-2004 à 12:59:32    

Pour ce genre de besoin, utilise la classe Properties  ...
 
Si tu veux faire ca en XML, y a pas de problème, mais bon, l'intérêt est pas énorme a part que c'est plus facilement évolutif.
 
y a une classe Preference en jdk1.4 aussi je crois ... mais je connais pas trop


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2004 à 13:16:52    

cool je connaissais pas ca...
 
 
merci bcp ! je vais voir ca de ce pas !

Reply

Marsh Posté le 15-01-2004 à 13:18:52    

benou a écrit :


y a une classe Preference en jdk1.4 aussi je crois ... mais je connais pas trop

Elle est mieux (pour faire ça).
Il y a un système pour livrer des configuration "en boite de conserve" avec l'application, et c'est du XML.
http://java.sun.com/j2se/1.4.2/doc [...] ences.html
 
si vraiment un poil de doc en plus est nécessaire, la doc du JSR :
http://www.jcp.org/aboutJava/commu [...] st/jsr010/
 
en particulier "Usage Notes"


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-01-2004 à 13:30:00    

merci pour usage notes, je crois que je vais 'en inspirer !


Message édité par spitagor le 15-01-2004 à 13:30:21
Reply

Marsh Posté le 15-01-2004 à 13:34:08    

Ouais, enfin, si t'as 4 petits paramètres à stocker, c'est peut être plus simple d'utiliser un bête fichier properties et la classe Properties, tu crois pas ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 15-01-2004 à 13:42:28    

el_gringo a écrit :

Ouais, enfin, si t'as 4 petits paramètres à stocker, c'est peut être plus simple d'utiliser un bête fichier properties et la classe Properties, tu crois pas ?

non, justement, c'est ça la feinte : Properties c'est pour les trucs plus compliqués.

Citation :

How does this API relate to Properties?
 
It is intended to replace most common uses of Properties, rectifying many of its deficiencies, while retaining its light weight. When using Properties, the programmer must explicitly specify a pathname for each properties file, but there is no standard location or naming convention. Properties files are "brittle", as they are hand-editable but easily corrupted by careless editing. Support for non-string data types in properties is non-existent. Properties cannot easily be used with a persistence mechanism other than the file system. In sum, the Properties facility does not scale.


 
je te renvoie vers http://www.jcp.org/aboutJava/commu [...] usage.html
 
pour bien voir que c'est vraiment bidon comme truc.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-01-2004 à 14:23:22    

Ouais, enfin, a ce que j'ai compris, c'est plus "encadré" que la classes Properties. Mais vu la simplicité d'usage, c'est vrai qu'il vaut surement mieux utiliser cette classe "Preferences".
Et, quand on fait un export des Preférences (exportTree ou qqch comme ça), elles sont formtées comment les données ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 15-01-2004 à 14:53:22    

Ya un truc super pour l'xml en java: jdom.. :love:


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 15-01-2004 à 15:09:44    

h4dd3r a écrit :

Ya un truc super pour l'xml en java: jdom.. :love:


Y'a SAX aussi : SAX = DOM simplifié mais moins puissant

Reply

Marsh Posté le 15-01-2004 à 15:09:44   

Reply

Marsh Posté le 15-01-2004 à 15:19:26    

el_gringo a écrit :

Et, quand on fait un export des Preférences (exportTree ou qqch comme ça), elles sont formtées comment les données ?


Code :
  1. The XML document has the following DOCTYPE declaration:
  2. <!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
  3. Note that the system URI (http://java.sun.com/dtd/preferences.dtd) is not accessed when exporting or importing prefereneces; it merely serves as a string to uniquely identify the DTD, which is:
  4.     <?xml version="1.0" encoding="UTF-8"?>
  5.     <!-- DTD for a Preferences tree. -->
  6.     <!-- The preferences element is at the root of an XML document
  7.          representing a Preferences tree. -->
  8.     <!ELEMENT preferences (root)>
  9.  
  10.     <!-- The preferences element contains an optional version attribute,
  11.           which specifies version of DTD. -->
  12.     <!ATTLIST preferences EXTERNAL_XML_VERSION CDATA "0.0" > 
  13.     <!-- The root element has a map representing the root's preferences
  14.          (if any), and one node for each child of the root (if any). -->
  15.     <!ELEMENT root (map, node*) >
  16.     <!-- Additionally, the root contains a type attribute, which
  17.          specifies whether it's the system or user root. -->
  18.     <!ATTLIST root
  19.               type (system|user) #REQUIRED >
  20.     <!-- Each node has a map representing its preferences (if any),
  21.          and one node for each child (if any). -->
  22.     <!ELEMENT node (map, node*) >
  23.     <!-- Additionally, each node has a name attribute -->
  24.     <!ATTLIST node
  25.               name CDATA #REQUIRED >
  26.     <!-- A map represents the preferences stored at a node (if any). -->
  27.     <!ELEMENT map (entry*) >
  28.     <!-- An entry represents a single preference, which is simply
  29.           a key-value pair. -->
  30.     <!ELEMENT entry EMPTY >
  31.     <!ATTLIST entry
  32.               key   CDATA #REQUIRED
  33.               value CDATA #REQUIRED >

http://java.sun.com/j2se/1.4.2/doc [...] ences.html
 
ça serait bien de lire les docs que je poste. Surtout que là c'est sur un sujet ridiculement minimaliste.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-01-2004 à 15:21:39    

yo c spi a écrit :


Y'a SAX aussi : SAX = DOM simplifié mais moins puissant


 
C'est pas simplifié, c'est une couche en dessous que DOM. Du coup c'est plus performant, et permet de faire de l'évènementiel (permet de ne lire qu'une partie du document : alors que le mode DOM oblige à lire l'intégralité du document pour construire l'arborescence).
Mais là on s'écarte du sujet.
Le gars qui à posté la question de base à 4 propriétés à gérer. Il va pas faire du SAX pour ça !!!


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 15-01-2004 à 17:41:53    

yo c spi a écrit :


Y'a SAX aussi : SAX = DOM simplifié mais moins puissant


[:kiki]
 
faut arrêter de dire n'importe quoi, hein !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2004 à 23:16:36    

VOus inquietez pas j'aurais d'autres questions qui vont venir tres vite sur Java et XML : je dois créer des albums de documents (en clair des fichiers qui ont la meme extension) , pour chaque document on peut avoir une ou plusieurs "propriétés" qui ont une valeur . Le tout est configurable par GUI que je suis en train de construire avec Swing !  
 
Je pense que l'utilisation se XML sera alors pleinement justifiée ! :D
 
Je prepare mes questions car je sens qu'il va y en avoir !
 :)


Message édité par spitagor le 15-01-2004 à 23:16:59
Reply

Marsh Posté le 16-01-2004 à 00:37:47    

el_gringo a écrit :


 
C'est pas simplifié, c'est une couche en dessous que DOM. Du coup c'est plus performant, et permet de faire de l'évènementiel (permet de ne lire qu'une partie du document : alors que le mode DOM oblige à lire l'intégralité du document pour construire l'arborescence).
Mais là on s'écarte du sujet.
Le gars qui à posté la question de base à 4 propriétés à gérer. Il va pas faire du SAX pour ça !!!


 
DOM est plutot une approche top-down et SAX une approche bottom-up au parsing d'un fichier XML.
DOM construit un arbre a partir du document XML ==> il faut lire tout le document pour construire l'arbre et de plus cet arbre consomme de la place memoire.
SAX envoie des evenements de parsing au fur et a mesure de la lecture du document ==> peu de consommation memoire, ...
On peut construire un arbre DOM a partir des informations SAX (quoique, elles sont peut etre insuffisantes a la base), mais ce n'est nullement une obligation. On peut avoir des parsers DOM n'ayant rien a voir avec SAX.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-01-2004 à 08:46:47    

Merci pour la petite précision.
A+


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-01-2004 à 14:15:57    

y'a XPP aussi [:zebra33]
 
 
[c'était mon moment j'étale ma culture à la manière de la confiture, merci à tous d'avoir suivi]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 16-01-2004 à 14:22:42    

the real moins moins a écrit :

y'a XPP aussi [:zebra33]
 
 
[c'était mon moment j'étale ma culture à la manière de la confiture, merci à tous d'avoir suivi]


 
Certains disent que la culture, c'est comme la confiture :
moins on en a, plus on l'étale ! :whistle:


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-01-2004 à 14:23:51    

c'est exactement ce que je voulais dire, y'avait'il vraiment besoin de l'expliquer?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 16-01-2004 à 14:24:46    

the real moins moins a écrit :

c'est exactement ce que je voulais dire, y'avait'il vraiment besoin de l'expliquer?


 
Au moins là, c'est clair !


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-01-2004 à 14:25:35    

je vois pas où ça aurait pu ne pas l'être.
 
 
 
 
 
et puis n'insiste pas trop, tu as déjà appris quelquechose, l'existence de l'XPP, c'est déjà ça non?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 16-01-2004 à 14:45:32    

the real moins moins a écrit :

je vois pas où ça aurait pu ne pas l'être.
 
et puis n'insiste pas trop, tu as déjà appris quelquechose, l'existence de l'XPP, c'est déjà ça non?


 
Ben, juste le nom, comme ça, on s'en fout un peu. Tant qu'a faire, si tu places le nom, une petite expliquation de ce dont il s'agit ne serait pas mal venue.
Ne serait-ce que pour montrer que en sais + sur la chose que sa simple dénomination ! :D


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-01-2004 à 14:51:33    

ben oui mais non, confiture, tout ça.
je sais juste que c'est une autre api que SAX et DOM pour parser de  l'xml et potentiellement très performante.
google >> XPP3


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 16-01-2004 à 15:09:18    

el_gringo a écrit :


Ne serait-ce que pour montrer que en sais + sur la chose que sa simple dénomination ! :D


Non non il peut pas préciser plus: la culture c juste superficiel!! ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 17-01-2004 à 14:36:03    

je reviens quelque peu sur le sujet initial.
 
ya un truc que je comprends pas je me suis a peu pres calqué sur la doc :
 
j'ai ma classe Prefs

Code :
  1. public class Prefs  {
  2.  
  3.  
  4.       private static final String copieFichiers = "copie";
  5.       private static final String dossierRacine = "dossier_racine";
  6.       private static Preferences p = Preferences.userNodeForPackage(Prefs.class);
  7.  
  8.    public static Preferences getPreferences()
  9.      
  10.       {
  11.      
  12.                  return p;
  13.       }
  14.        public static String getCopieStr()
  15.      
  16.       {
  17.       System.out.println("str"+copieFichiers);
  18.                  return copieFichiers;
  19.                
  20.       }
  21.  
  22.        public static String getRepRacineStr()
  23.      
  24.       {
  25.        System.out.println("str"+dossierRacine);
  26.                  return dossierRacine;
  27.              
  28.       }
  29.  
  30.        public static boolean getCopieVal()
  31.      
  32.       {
  33.      
  34.          boolean copie = p.getBoolean(copieFichiers, false);
  35.                     System.out.println("val"+copie);
  36.          return copie;
  37.       }
  38.  
  39.        public static String getRepRacineVal()//pour la sauvegarde des parametres
  40.      
  41.       {
  42.          String repRacine = p.get(dossierRacine,"C:\\test\\" );
  43.                       System.out.println("val "+repRacine);
  44.          return repRacine;
  45.       }
  46.  
  47.  
  48.  
  49.  
  50.    }


et ensuite je l'utilise comme ceci (dans une fenetre)

Code :
  1. private void bt_okActionPerformed(ActionEvent evt) {
  2.      
  3.       // mise a jour des preferences
  4.          try
  5.          {
  6.             Prefs.getPreferences().putBoolean(Prefs.getCopieStr(),this.radio_copie.isSelected());
  7.             Prefs.getPreferences().put(Prefs.getCopieStr(),this.chemindossracine.toString());
  8.          }
  9.              catch(NullPointerException e)
  10.            
  11.             {
  12.                System.out.println("nullpointerput" );
  13.             }
  14.          setVisible(false);
  15.          dispose();
  16.       //la on verifie que ca a bien mis a jours les parametres... et ben ca marche pas!!!
  17.          System.out.println("copie des fichiers : "+Prefs.getCopieVal());
  18.          System.out.println("dossier racine : "+Prefs.getRepRacineVal());


 
 
 
et ca marche pas les parametre restent a leurs valeurs par defaut :
 
trace  
 

Code :
  1. strcopie
  2. strcopie
  3. valfalse
  4. copie des fichiers : false
  5. val C:\test\
  6. dossier racine : C:\test\


 
J'ai du pas faire un truc que j'aurais du ou alors ya ue erreur conne...j'ai un peu peur des static aussi...

Reply

Marsh Posté le 17-01-2004 à 19:06:33    

c bon g trouvé
 
pour info pour recuperer le contenu d'un JTextField il faut faire getText et non pas toString()
 
 
je sus un boulet et j'assume
 

Reply

Marsh Posté le 21-01-2004 à 01:00:08    

Je viens de m'apercevoir que l'on ne peut stocker ques des strings dans la classe Preferences. :(  
 
Ca doit etre du au format d'exportation (XML) mais comment faire pour detourner cette difficulté ? Moi qui voulait mettre une Hashmap j'aurais mieux fait d'utiliser la classe Properties... :cry:  nraynaud un avis? :whistle:


Message édité par spitagor le 21-01-2004 à 01:00:45
Reply

Marsh Posté le 21-01-2004 à 08:54:28    

spitagor a écrit :

Je viens de m'apercevoir que l'on ne peut stocker ques des strings dans la classe Preferences. :(  
 
Ca doit etre du au format d'exportation (XML) mais comment faire pour detourner cette difficulté ? Moi qui voulait mettre une Hashmap j'aurais mieux fait d'utiliser la classe Properties... :cry:  nraynaud un avis? :whistle:  

Il aurait fallu lire la Faq, c'était marqué dedans qu'on ne pouvait mettre que des types primitifs et des strings.
 
Ben soit tu passes au calibre d'au-dessus, soit tu fais le dump de ton hashMap à la main.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 21-01-2004 à 21:02:27    

heu... il me semble avoir lu dans la doc si j'ai bien compris qu'il n'etait pas conseillé avec la classe Properties, d'utiliser autre chose que des Strings...  
 
pour le dump du Hashmap a la main , je suppose que tu veux dire d'entrer les valeurs a la main... ok mais dans ce cas la ou le stocker? par exemple si j'ai un tableau des extensions connues que je remplis a la main, je dois pouvoir le sauvegarder d'un maniere ou d'un autre (fichier ...) de marniere a ce que je n'ai pas a le recreeer(lourd) a chaque lancement de l'apllication. Bon ca c'est faisable .
 
Le probleme c'est que je dois stocker une association (Hashmap) : j'associe une String a une ArrayList d'extensions.
Et comme je peux le mettre ni dans properties ni dans preferences, je le mets ou? dans une class statique?
 
 
De plus pour ce cas, ca serait pas mal un fichier XML a priori :whistle:  
 
Je sais j'ai beaucoup de question mais apres avoir lu la doc, j'ai du mal a choisir une solution. :??:  
 
Sinon... qu'entends tu par "passer un Calibre au dessus?"  :jap:  
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed