Java enregistrer un fichier txt
gege.2007
Messages postés
25
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'aimerais avoir un exemple de code Java qui permet de charger un fichier txt comme celui-ci
Pour mettre à jour la quantité de ce fichier xml :
et obtenir:
Je vous remercie d'avance
Gege
J'aimerais avoir un exemple de code Java qui permet de charger un fichier txt comme celui-ci
a, 155, 3, 3
b, 2236, 5, 6
Pour mettre à jour la quantité de ce fichier xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne>
<lettre code="3" prix="5.00" quantité= "2" />
<lettre code="5" prix="10.00" quantité= "4" />
</personne>
et obtenir:
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne>
<lettre code="3" prix="5.00" quantité= "3" />
<lettre code="5" prix="10.00" quantité= "6" />
</personne>
Je vous remercie d'avance
Gege
2 réponses
-
Bonjour,
Pour comprendre ton exempleb, 2236, 5, 6
il faudrait récupérer l'élément<lettre code="5"/>
pour lui affecter la valeurquantité= "6"
?
À quoi servent b et 2236 ?-
Bonjour KX, oui c'est exactement cela!
Pour la lettre et 2236 ou 155 on peut le voir comme le nom d'une personne et son ID, par contre cela n'est pas pris en compte dans le fichier xml puisque l'on s’intéresse seulement au code de la lettre ici 3 ou 5, au prix qui est toujours le même 5.00 ou 10.00 et à la quantité qui est ce que l'on doit mettre à jour. -
Voici un code qui permet de lire le contenu de ton fichier.
Mais attention, pour Java, il est nécessaire que le XML soit bien formé, et pour cela il faudra enlever l'accent àquantité
sinon tu auras une erreur.import javax.xml.parsers.*; import org.w3c.dom.*; public class XML { public static void main(String[] args) throws Exception { Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse("c:/personne.xml"); doc.getDocumentElement().normalize(); NodeList lettres = doc.getElementsByTagName("lettre"); for (int i = 0; i < lettres.getLength(); i++) { Element lettre = (Element) lettres.item(i); NamedNodeMap attributes = lettre.getAttributes(); for (int j = 0; j < attributes.getLength(); j++) { Node attr = attributes.item(j); System.out.println(attr.getNodeName() + ": " + attr.getNodeValue()); } System.out.println(); } } } -
-
-
Salut, petit soucis c'est que le code en question ne modifie pas le fichier xml à partir des infos du fichier txt, j'ai essayé et ça ne fait que lire le fichier xml.
-
-
Des exemples tu en as dans la documentation :
https://docs.oracle.com/javase/tutorial/jaxp/xslt/writingDom.html
J'ai repris le code précédent pour remplacer l'affichage par des setNodeValue et j'ai ajouté à la fin l'enregistrement du fichier.import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*; public class XML { public static void main(String[] args) throws Exception { Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse("c:/personne.xml"); doc.getDocumentElement().normalize(); NodeList lettres = doc.getElementsByTagName("lettre"); for (int i = 0; i < lettres.getLength(); i++) { Element lettre = (Element) lettres.item(i); NamedNodeMap attributes = lettre.getAttributes(); Node code = attributes.getNamedItem("code"); Node quantite = attributes.getNamedItem("quantite"); if (code.getNodeValue().equals("3")) quantite.setNodeValue("3"); if (code.getNodeValue().equals("5")) quantite.setNodeValue("6"); } TransformerFactory.newInstance().newTransformer().transform( new DOMSource(doc), new StreamResult(new File("C:/personne2.xml"))); } }
Le XML résultat est :<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><personne> <lettre code="3" prix="5.00" quantite="3"/> <lettre code="5" prix="10.00" quantite="6"/> </personne>
Il te reste bien sûr encore un peu de travail à faire pour remplacer les if que j'ai mis en dur dans le code par les modifications que tu as mis ligne par ligne dans ton fichier txt.
-