[java+xml]petite question

petite question [java+xml] - Programmation

Marsh Posté le 21-06-2002 à 15:10:02    

j'aimerait crer un fichier de proprités dans lequel je stockerait des infos qui serons chargée au demarage de mon programme java.
j aimerait utiliser un fichier XML mais je sait pas par ou commencer
si vous avez des adresses de site ou ce serait bien expliqué ce serait cool ou si quelqu'un veux se donner la peine de m'expliquer en quelques mots...
 
 
 
merci

Reply

Marsh Posté le 21-06-2002 à 15:10:02   

Reply

Marsh Posté le 21-06-2002 à 15:12:05    

j'ai un super framework pour toi sous la main si tu veux
[ct une private joke désolé]
 
ben utilise jdom, césuperfacil

Reply

Marsh Posté le 21-06-2002 à 15:19:43    

--greg-- a écrit a écrit :

j'ai un super framework pour toi sous la main si tu veux
[ct une private joke désolé]
 




 
 :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:21:01    

DarkLord a écrit a écrit :

 
 
 :heink:  




oué avec plein de belles exception et tout
la grande classe

Reply

Marsh Posté le 21-06-2002 à 15:21:55    

c pas encore sur CVS mais ca va pas tarder (je te filerai le lien si tu veux). Voilà comment  sauver/loader un doc XML. C'est pas super super propre mais bon c'est un bon début je crois
 

Code :
  1. package be.ac.fundp.infonet.econf.ui.helper;
  2. import java.io.*;
  3. import java.util.*;
  4. import org.jdom.*;
  5. import org.jdom.output.XMLOutputter;
  6. import org.jdom.input.*;
  7. import be.ac.fundp.infonet.econf.ui.bean.PreferencesBean;
  8. /**
  9. * Helper for the Preferences UI. Allows to retrieve and save data from XML configuration file.
  10. * @author Stéphane Nicoll
  11. */
  12. public class PreferencesHelper {
  13.     /**
  14.      *  Logging object.
  15.      */
  16.     private static org.apache.log4j.Category m_logCat =
  17.             org.apache.log4j.Category.getInstance
  18.             (PreferencesHelper.class.getName());
  19.     public static final String configPath = System.getProperty("user.home" ) + File.separator + ".eConf" + File.separator + "config.xml";
  20.     private static final String xml_root = "econf-config";
  21.     private static final String xml_metaRoot = "meta-config";
  22.     private static final String xml_metaItem = "meta-item";
  23.     private static final String xml_audioRoot = "audio-config";
  24.     private static final String xml_audioFormat = "audioFormat";
  25.     private static final String xml_audioQuality = "audioQuality";
  26.     private static final String xml_audioSampleSize = "audioSampleSize";
  27.     private static final String xml_audioRendering = "audioRendering";
  28.     private static final String xml_miscRoot = "misc-config";
  29.     private static final String xml_tempDirectory = "tempDirectory";
  30.     private static final String xml_name = "name";
  31.     private static final String xml_value = "value";
  32.     /**
  33.      * Loads the data contained in the XML configuration file.
  34.      * @return An initialized PreferencesBean
  35.      */
  36.     public static PreferencesBean load() {
  37.         File f = new File(configPath);
  38.         if (f.exists()) {
  39.             return loadXMLDocument(f);
  40.         }
  41.         else
  42.             m_logCat.warn("Configuration file does not exist yet in: " + configPath);
  43.         return new PreferencesBean();
  44.     }
  45.     /**
  46.      * Saves the current status to the XML configuration file.
  47.      * @param prefs
  48.      * The user prefrences
  49.      * @exception IOException
  50.      * If an error occurs while saving
  51.      */
  52.     public static void save(PreferencesBean prefs) throws IOException {
  53.         File f = new File(configPath);
  54.         if (f.exists()) {
  55.             f.delete();
  56.             f.createNewFile();
  57.             saveXMLDocument(prefs, f);
  58.         }
  59.     }
  60.     /**
  61.      * Update the status of the system with the specified user prefrences
  62.      * @param prefs
  63.      * The user preferences
  64.      */
  65.     public static void updateCurrentStatus(PreferencesBean prefs) {
  66.     }
  67.     /**
  68.      * Loads the preferences contained in the specified file.
  69.      * @param configFile
  70.      * The XML containing user preferences.
  71.      * @return the beans contained loaded data or an empty bean if an error occured.
  72.      */
  73.     private static PreferencesBean loadXMLDocument(File configFile) {
  74.         PreferencesBean pref = new PreferencesBean();
  75.         try {
  76.             SAXBuilder builder = new SAXBuilder();
  77.             Document doc = builder.build(configFile);
  78.             Element root = doc.getRootElement();
  79.             if (!root.getName().equals(xml_root)) {
  80.                 m_logCat.error("XML Config file is invalid. Invalid root: " + root.getName());
  81.                 return pref;
  82.             }
  83.             Element metaElement = root.getChild(xml_metaRoot);
  84.             Element audioElement = root.getChild(xml_audioRoot);
  85.             Element miscElement = root.getChild(xml_miscRoot);
  86.             if ((metaElement == null) || (audioElement == null) || (miscElement == null)) {
  87.                 m_logCat.error("XML Config file is invalid. Missing mandatory part" );
  88.                 return pref;
  89.             }
  90.             Element audioFormat = audioElement.getChild(xml_audioFormat);
  91.             Element audioQuality = audioElement.getChild(xml_audioQuality);
  92.             Element audioSampleSize = audioElement.getChild(xml_audioSampleSize);
  93.             Element audioRendering = audioElement.getChild(xml_audioRendering);
  94.             if ((audioFormat == null) || (audioQuality == null) || (audioSampleSize == null) || (audioRendering == null)) {
  95.                 m_logCat.error("XML Config file is invalid. Missing audio part" );
  96.                 return pref;
  97.             }
  98.             Element tempDir = miscElement = root.getChild(xml_tempDirectory);
  99.             if (tempDir == null) {
  100.                 m_logCat.error("XML Config file is invalid. Missing misc part" );
  101.                 return pref;
  102.             }
  103.             // Meta
  104.             Iterator metas = (metaElement.getChildren()).iterator();
  105.             while (metas.hasNext()) {
  106.                 Element e = (Element) metas.next();
  107.                 if ((e.getAttribute(xml_name).getValue()).equals("author" )) {
  108.                     pref.setMetaAuthor(e.getAttribute(xml_value).getValue());
  109.                 }
  110.                 else if ((e.getAttribute(xml_name).getValue()).equals("copyright" )) {
  111.                     pref.setMetaCopyright(e.getAttribute(xml_value).getValue());
  112.                 }
  113.             }
  114.             /// Audio
  115.             pref.setAudioFormat(audioFormat.getText());
  116.             pref.setAudioQuality(audioQuality.getText());
  117.             pref.setAudioSampleSize(audioSampleSize.getText());
  118.             pref.setAudioRendering(audioRendering.getText());
  119.             // Misc
  120.             pref.setTempDirectory(tempDir.getText());
  121.             return pref;
  122.         }
  123.         catch (Exception e) {
  124.             m_logCat.error("Error while loading configuration file", e);
  125.             return new PreferencesBean();
  126.         }
  127.     }
  128.     /**
  129.      * Saves the preferences contained in the specified preferences in the specified file.
  130.      * @param configFile
  131.      * The XML containing user preferences.
  132.      * @return the beans contained loaded data or an empty bean if an error occured.
  133.      */
  134.     private static void saveXMLDocument(PreferencesBean pref, File f) throws IOException {
  135.         Element root = new Element(xml_root);
  136.         // Meta
  137.         Element metaRoot = new Element(xml_metaRoot);
  138.         Element metaAuthor = new Element(xml_metaItem);
  139.         Attribute name = new Attribute(xml_name, "author" );
  140.         Attribute value = new Attribute(xml_value, pref.getMetaAuthor());
  141.         metaAuthor.setAttribute(name);
  142.         metaAuthor.setAttribute(value);
  143.         Element metaCopyright = new Element(xml_metaItem);
  144.         name = new Attribute(xml_name, "copyright" );
  145.         value = new Attribute(xml_value, pref.getMetaCopyright());
  146.         metaCopyright.setAttribute(name);
  147.         metaCopyright.setAttribute(value);
  148.         metaRoot.addContent(metaAuthor);
  149.         metaRoot.addContent(metaCopyright);
  150.         // Audio
  151.         Element audioRoot = new Element(xml_audioRoot);
  152.         Element audioFormat = new Element(xml_audioFormat);
  153.         audioFormat.setText(pref.getAudioFormat());
  154.         Element audioQuality = new Element(xml_audioQuality);
  155.         audioQuality.setText(pref.getAudioQuality());
  156.         Element audioSampleSize = new Element(xml_audioSampleSize);
  157.         audioSampleSize.setText(pref.getAudioSampleSize());
  158.         Element audioRendering = new Element(xml_audioRendering);
  159.         audioRendering.setText(pref.getAudioRendering());
  160.         audioRoot.addContent(audioFormat);
  161.         audioRoot.addContent(audioQuality);
  162.         audioRoot.addContent(audioSampleSize);
  163.         audioRoot.addContent(audioRendering);
  164.         // misc
  165.         Element miscRoot = new Element(xml_miscRoot);
  166.         Element tempDir = new Element(xml_tempDirectory);
  167.         tempDir.setText(pref.getTempDirectory());
  168.         miscRoot.addContent(tempDir);
  169.         root.addContent(metaRoot);
  170.         root.addContent(audioRoot);
  171.         root.addContent(miscRoot);
  172.         Document doc = new Document(root);
  173.         FileOutputStream out = new FileOutputStream(f);
  174.         XMLOutputter fmt = new XMLOutputter();
  175.         fmt.setOmitEncoding(true);
  176.         fmt.output(doc, out);
  177.     }
  178. }


 
et le code XML qui est associé est le suivant
 

Code :
  1. <econf-config>
  2. <meta-config>
  3.  <meta-item name="author" value="Stephane Nicoll"/>
  4.  <meta-item name="copyright" value="(C) Stephane Nicoll 2002"/>
  5. </meta-config>
  6. <audio-config>
  7.  <audioFormat>MP3</audioFormat>
  8.  <audioQuality>22050Hz</audioQuality>
  9.  <audioSampleSize>16bits</audioSampleSize>
  10.  <audioRendering>mono</audioRendering>
  11. </audio-config>
  12. <misc-config>
  13.  <tempDirectory>c:\temp</tempDirectory>
  14. </misc-config>
  15. </econf-config>


 
et c'est du JDOM. je confirme ce que Greg dit c'est le plus simple selon moi


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:22:12    

--greg-- a écrit a écrit :

 
oué avec plein de belles exception et tout
la grande classe  




 
PTDR :D


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:23:37    

ah oui un detail. Le PreferencesBean c'est un bean tout ce qu'il y a de plus classique (avec des set get pour les différentes informations)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:44:43    

merci a vous deux:
j ai donc télécharger JDom
 
mais comment jdoit faire pour ne pas avoir besoin de ca


 private static org.apache.log4j.Category m_logCat =
           org.apache.log4j.Category.getInstance
           (PreferencesHelper.class.getName());


 
 
d ailleurs je sait meme pas a quoi ca correspond pour l instant,il en est de meme pour le Bean jpeut pas faire sans?
juste histoire de bien depoyer le code que tu m a fournis Dark
 
merci

Reply

Marsh Posté le 21-06-2002 à 15:45:46    

oups c'est log4j. C'est un outil jakarta pour logger efficacement les programmes. Tu peux le remplacer par System.out (enfin remplacer m_logCat.warn, info, error etc par des System.out.println()


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:50:31    

DarkLord a écrit a écrit :

oups c'est log4j. C'est un outil jakarta pour logger efficacement les programmes. Tu peux le remplacer par System.out (enfin remplacer m_logCat.warn, info, error etc par des System.out.println()  




 
 
ok merci  
et chui tomber sur cette page de votre cvs mais y a pas de repertoire ui (en vu d y trouver PreferencesBean)
 
http://cvs.sourceforge.net/cgi-bin [...] net/econf/

Reply

Marsh Posté le 21-06-2002 à 15:50:31   

Reply

Marsh Posté le 21-06-2002 à 15:53:45    

tu peux me tutoyer tu sais ;)  (en réalité je travaille seul sur ce projet pour l'instant).
 
Tu as raison, le bean n'a pas encore été commité (ni ui d'ailleurs) chose que je ferai ce soir.
 
Tu veux le bean aussi ou quoi ?
 
c'est pas vraiment un example à executer tel quel, je voulais te montrer comment récupérer des fils, attributs, du texte, etc.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 15:57:04    

DarkLord a écrit a écrit :

tu peux me tutoyer tu sais ;)  (en réalité je travaille seul sur ce projet pour l'instant).
 
Tu as raison, le bean n'a pas encore été commité (ni ui d'ailleurs) chose que je ferai ce soir.
 
Tu veux le bean aussi ou quoi ?
 
c'est pas vraiment un example à executer tel quel, je voulais te montrer comment récupérer des fils, attributs, du texte, etc.  




 
 
oui jvien de voir,jvai essayé de comprendre le code que tu m a filé,jte tien au courant
 
 
 :hello:

Reply

Marsh Posté le 21-06-2002 à 16:25:42    

encore une question,
j ai crée mon bean qui remplace le tien
 
lorsque je compile j ai encore une erreur mais jvoi vraiment pas d'ou ca vien :(
 
 

C:\WINNT\Profiles\jeromes\Bureau\xml\PreferencesHelper.java:84: cannot access org.xml.sax.InputSource
file org\xml\sax\InputSource.class not found
           Document doc = builder.build(configFile);
                                 ^
1 error


 
c'est ici:

Code :
  1. MyBean pref = new MyBean();
  2.        try {
  3.            SAXBuilder builder = new SAXBuilder();
  4.            Document doc = builder.build(configFile);<<c ici qu'il bloque
  5.            Element root = doc.getRootElement();
  6.            if (!root.getName().equals(xml_root)) {
  7.                System.out.print("XML Config file is invalid. Invalid root: " + root.getName());
  8.                return pref;
  9.            }

Reply

Marsh Posté le 21-06-2002 à 16:33:49    

bin ca a rien a voir avec le bean. Il te manque un jar c'est tout. Tu as xerces et jdom dans ton classpath ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 16:49:28    

DarkLord a écrit a écrit :

bin ca a rien a voir avec le bean. Il te manque un jar c'est tout. Tu as xerces et jdom dans ton classpath ?  




 
 
ca je sait bien c etait pour te mettre au courant lol
 
bon ben en ajoutant xerces.jar
ca marche merci beaucoup
 :hap:

Reply

Marsh Posté le 21-06-2002 à 16:53:54    

you're welcome ;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-06-2002 à 16:59:53    

les fichiers XML tu les crée avec un editeur special ?

Reply

Marsh Posté le 21-06-2002 à 17:01:03    

veryfree a écrit a écrit :

les fichiers XML tu les crée avec un editeur special ?  




 
non UltraEdit. L'important c'est ton cerveau pour des petits fichiers comme ca (agencer les items proprement etc)


---------------
Just because you feel good does not make you right
Reply

Sujets relatifs:

Leave a Replay

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