Java enregistrer un fichier txt

Fermé
gege.2007 Messages postés 25 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 14 décembre 2016 - 13 déc. 2016 à 18:24
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 17 déc. 2016 à 12:34
Bonjour,
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
A voir également:

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
13 déc. 2016 à 19:16
Bonjour,

Pour comprendre ton exemple
b, 2236, 5, 6
il faudrait récupérer l'élément
<lettre code="5"/>
pour lui affecter la valeur
quantité= "6"
?

À quoi servent b et 2236 ?
1
gege.2007 Messages postés 25 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 14 décembre 2016
Modifié par gege.2007 le 13/12/2016 à 21:06
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.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
13 déc. 2016 à 21:47
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();
        }
    }
}
1
gege.2007 Messages postés 25 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 14 décembre 2016
14 déc. 2016 à 00:20
Super, merci beaucoup KX pour cet exemple et pour tes conseils.
Bonne soirée.
0
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.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
16 déc. 2016 à 18:40
En effet, c'est d.ailleurs comme ça que j'ai présenté ce code, il permet de le lire, mais également d'extraire les bonnes valeurs au format XML ce qui permet de les modifier dans le DOM comme tu le souhaites avant d'écrire le nouveau contenu dans un fichier.
0
gege.2007 > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
17 déc. 2016 à 10:21
Ah d'accord j'avais pas compris, merci.
Par contre si cela ne te dérange pas pourrais-tu me mettre le code complet avec la DOM aussi, car je suis en train d'apprendre et j'aurais vraiment besoin d'un exemple de ce type. merci beaucoup
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié par KX le 17/12/2016 à 12:34
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.
0