cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008
-
1 mars 2007 à 13:45
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
6 mars 2007 à 18:12
Salut à tous.
J'ai un fichier connexion.xml dont je souhaiterai lire ou modifier un text precis. Apres des recherches sur le net, j'ai cru comprendre que JDOM est le meilleur choix. Par contre, j'ai lu +ieurs fichiers d'aide (y compris sur ce site), mais j'y arrive pas car ça ne correspond jamais à de la modification de "text".
Voici mon fichier xml :
et ce que j'ai ecrit en java (fonctionne pas bien sûr) :
org.jdom.Document document = null;
Element racine;
Element element = null;
SAXBuilder sxb = new SAXBuilder();
try{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé
document = sxb.build(new File("C:\\Program Files\\MeteoStat2007\\connexion.xml"));
}
catch(Exception jdm) {
jdm.printStackTrace();
}
racine = document.getRootElement();
List listchild = racine.getChildren();
Iterator i = listchild.iterator();
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 4 mars 2007 à 09:49
Salut.
Merci pour ton aide. J'ai modifié mon code comme ceci :
Element racine = null;
Element element = null;
SAXBuilder sxb = new SAXBuilder();
try{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé
document = sxb.build(new File("C:\\Program Files\\MeteoStat2007\\connexion.xml"));
}
catch(Exception jdm) {
jdm.printStackTrace();
}
racine = document.getRootElement();
if(jTFPort.getText()!=""){
try{
racine.getChild("port").setText(jTFPort.getText());
}
catch(Exception eport){
}
}
Il n'y a pas d'erreur, mais le fichier n'est pas modifié.
Il y aurait-il un probleme dans la façon dont j'ecrit le chemin du fichier?
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 4 mars 2007 à 14:36
Slt.
Et une fois que tu as fait les modif que tu voulais, il me semble qu'il faut (re)enregistrer le fichier (je m'etait fait avoir).
Pour l'enregistrer, tu fais :
try{
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, new FileOutputStream("Le_Nom_De_Ton_Fichier.xml"));
}catch (Exception ex){}
et là, normalelemnt ca devrait fonctionner correctement.
Pour un exemple complet :
SAXBuilder sxb = new SAXBuilder();
try{
document = sxb.build(new File("Le_Nom_De_Ton_Fichier.xml"));
}catch (Exception ex){}
racine = document.getRootElement();
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 5 mars 2007 à 14:34
Salut.
Désolé, mais ça ne donne rien en l'adaptant. J'ai un message d'erreur :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at stat_meteo.meteorologie$1.actionPerformed(meteorologie.java:144)
Voila la ligne 144 :
racine.getChild("port").setText(jTFPort.getText());
Et voila comment j'ai adapté le code :
org.jdom.Document document = null;
Element racine = null;
SAXBuilder sxb = new SAXBuilder();
try{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé
document = sxb.build(new File("c:/Program Files/MeteoStat2007/connexion.xml"));
}
catch(Exception jdm) {
jdm.printStackTrace();
}
racine = document.getRootElement();
if(jTFPort.getText()!=""){
racine.getChild("port").setText(jTFPort.getText());
System.out.println("valeur : "+jTFPort.getText());
try{
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, new FileOutputStream("c:/Program Files/MeteoStat2007/connexion.xml"));
}
catch (Exception ex){
System.err.println(ex);
}
}
J'ai aussi regardé sur le net pour voir si je l'avais mal ecrit, mais je ne vois pas l'erreur.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 mars 2007 à 16:04
Slt.
conseil: n'utilise pas "==" et/ou "!=" pour comparer des String mais plutot la methode "String.equals(String)"
l'exception NullPointerException signifi que quelque part dans ton code tu veux attribuer une valeur à quelque chose mais que cette valeur est null.
effectu la modif et di moi si il y a tjrs l'erreur.
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 5 mars 2007 à 19:44
Salut.
J'ai suivi ton conseil, et il y a effectivement un pb. Voilà ce que j'ai fais :
org.jdom.Document document = null;
Element racine = null;
SAXBuilder sxb = new SAXBuilder();
try{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé
document = sxb.build(new File("c:/Program Files/MeteoStat2007/connexion.xml"));
}
catch(Exception jdm) {
jdm.printStackTrace();
}
//JUSQUE LA, PAS DE CHANGEMENT
String verif = "";
String val_port;
racine = document.getRootElement();
System.out.println(jTFPort.getText()); //Pour vérifier le getText, on sais jamais
/*La j'ai modifié pour le test de chaine vide, l'execution se fait dans le "else"
je savais pas comment faire autrement. Et j'ai remplacé les "getText" par des String
afin de vérifier encore une fois que ça ne venait pas du getText, et tout est ok*/
if(jTFPort.getText().equals(verif)){
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 6 mars 2007 à 07:48
Salut.
Bon, ben c'est une erreur toute bête, j'ai oublié de remettre la ligne en question dans un try....
Il n'y a plus d'erreur, la "date de modification" du fichier change, mais pas son contenue.
Je continue de chercher.
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 6 mars 2007 à 15:10
Je mets tout le message d'erreur :
java.lang.NullPointerException
at stat_meteo.meteorologie$1.actionPerformed(meteorologie.java:152)
(La ligne 152 : racine.getChild("port").setText(val_port);)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 6 mars 2007 à 16:24
slt.
c'est normale, tu n'initialise nul part ta variable "String val_port;".
au passage, tu peut remplacer "if(jTFPort.getText().equals(verif)){}" par "if(! jTFPort.getText().equals("")){/*tou le code que tu as mit dans le bloc else*/}" --> l'operateur "!" signifi egale a false. Donc si la saisie n'est pas vide alors ...
cs_thanatos67
Messages postés51Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention13 novembre 2008 6 mars 2007 à 17:51
Salut.
Merci pour la variable, j'avais pas tilté. J'ai effectué les modifications, et il n'y a aucun changement. J'en arrive à me demander si c'est pas l'API qui pose problème...