IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

problème écriture de fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut problème écriture de fichier
    Bonjour,

    Je fais un parsing de fichier xml, et je souhaite récupérer les attributs d'un tag et les écrire en fichier de sortie (txt).
    avec ce code là, quand je fais un println ça m'affiche bien tous ces élements, mais quand je fais une écriture de fichier, ça écrit uniquement les attributs de la dernière ligne du fichier xml .

    qqu pourrait m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    public void startElement(String namespace, 
    			     String localname,
    			     String qualname,
    			     Attributes  atts) {
     
        	FileWriter st1 = null;
    	    BufferedWriter st2 = null;
    	    String client;
    	    String id;
    	    String idSess;
     
     
     
     
        	System.out.println("Balise ouvrante : " + 
    			   "namespace=" + namespace + 
    			   " localname=" + localname + 
    			   " qualname=" + qualname	);
     
    	if(qualname.equalsIgnoreCase("lig")) {
     
    		try{
     
    		st1 = new FileWriter("C:/FileSortie.txt");
    	        st2 = new BufferedWriter(st1);
     
    		client = atts.getValue("cl");
    		id = atts.getValue("idt");
    		idSess = atts.getValue("sess");
     
     
    		System.out.println("client"+client+";"+"id"+id+";"+"idSess"+idSess
    				);
     
    		st2.write(client+";"+id+";"+idSess);	
    		st2.newLine();
     
    		.................
     
    }
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a chaque élément, tu ouvre à nouveau le fichier en l'écrasant. Ouvre une fois pour toutes le fichier avant de traiter tous tes éléments et passe le writer en paramètre à ta méthode.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Est-ce que tu pourrais me donner stp un exemple à partir du code?
    le writer je dois le passer en paramètre de la méthode startElement?

    Merci pour ta réponse.

    Citation Envoyé par tchize_ Voir le message
    a chaque élément, tu ouvre à nouveau le fichier en l'écrasant. Ouvre une fois pour toutes le fichier avant de traiter tous tes éléments et passe le writer en paramètre à ta méthode.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je crois que c'est pas difficile, tu créer ton filewriter avant d'appeler plein de fois ta méthode start element, au lieu de le faire à chaque fois que tu l'appelle. Non seulement tu écrase à chaque fois ton fichier, mais c'est aussi très peu performant. Ouvrir un fichier c'est consommateur en temps et en ressources.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    dans ce cas, à quel niveau je peux faire l'écriture du fichier?
    comment je peux récupérer les attributs du tag <lig> sans passer par la méthode startElement?

    juste pour info, j'utilise l'API SAX pour le parsing des données XML.

    j'ai les 2 classes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    //classe qui exécute le parsing
    class TrivialSAXRead {
     
     
     
    	public static final String FILE = "C:/file.xml";
     
     
     
    	public static void main(String [] args)
    	throws Exception
        {
     
    		TrivialSAXHandler triv = new TrivialSAXHandler();
     
    		// Création de la fabrique de parsers
    	SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    	// Création du parser
    	SAXParser parser = parserFactory.newSAXParser();
     
    	   parser.parse(FILE, new TrivialSAXHandler());
     
        }
    }
    puis classe du Handler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
     
    class TrivialSAXHandler extends DefaultHandler {
     
    	 FileWriter st1 = null;
    	 BufferedWriter st2 = null;
     
    	public void setDocumentLocator(Locator locator) {
    	System.out.println("Location : " + 
    			   "publicId=" + locator.getPublicId() + 
    			   " systemId=" + locator.getSystemId());
        }
        public void startDocument() {
    	System.out.println("Debut du document");
        }
        public void endDocument() {
    	System.out.println("Fin du document");
        }
     
     
        public void startElement(String namespace, 
    			     String localname,
    			     String qualname,
    			     Attributes  atts) {
    	...............
    	}
    Merci.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Stocke le FileWriter en tant que champs dans ta classe TrivialSAXHandler. Tu l'ouvre en écriture avant d'appeler parse et tu le ferme après, tout simplement.

Discussions similaires

  1. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 00h08
  2. Réponses: 5
    Dernier message: 04/12/2006, 17h40
  3. [Rman]problème écriture sur fichier (linux)
    Par Invité dans le forum Oracle
    Réponses: 20
    Dernier message: 30/08/2006, 05h52
  4. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  5. [Servlet] Probléme écriture fichier
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/05/2005, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo