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 :

Flush & ecriture 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 Flush & ecriture de fichier
    Bonjour,
    je fais une écriture de fichier en sortie de mon programme, mais quand je vérifie le fichier après, je trouve qu'il en manque des données.
    j'ai lu sur la doc que la méthode flush sert à forcer le BufferedWriter à écrire toutes les données dans l'outputstream, mais à quel niveau je devrais l'intégrer dans mon code?
    Merci

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    public double WriteFile (int pUsr, int art){
     
    	  	  double pr = 0;
     
    		     HashMap clts = getCls();
    		     HashMap<Integer,Integer> ress =getPrds();
    		     TreeMap ids = mapIdUsr;
     
    		      FileWriter st1 = null;
    		      BufferedWriter st2 = null;
     
    		      String clt ; 
    		      String prd ;
    		      String prx ;
     
    		      try{
    		      st1 = new FileWriter("C:/myFile.txt");
    		          st2 = new BufferedWriter(st1);
     
    		   	 for (Iterator itr = clts.keySet().iterator(); itr.hasNext();) 
    		         {
    		           pUsr = (Integer)itr.next();
    		             for (Iterator it = ids.keySet().iterator(); it.hasNext();)
    				  	  {
    				  art = (Integer)it.next();
    				 	  pr = tablePr [pUsr][art];
     
    					 clt = String.valueOf(pUsr);
    					 prd = String.valueOf(art);
    					 prx= String.valueOf(pr);
     
    					      st2.write(prx+" ");						                                }
     
    				  	st2.newLine();
     
    				  	  }
    		        			      	}
     
    	  catch (IOException e) {
    	  System.out.println("Pb file");
    	  }
     
    	  finally{
    	  try  {
    	    if (st2 != null)
    	    st2.close();
    	    if (st1 != null)
    	    st1.close();
    	        }
    	    catch (IOException e) {
    	                          } 
    	  						}
    	  	return pr;
    	  }

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Il me semble que le flush sert à vider le tampon... non pas à forcer une ecriture de quoi que ce soit. (fouettez moi si je dit n'importe quoi )

    Affiche dans la console les données que tu sauvegarde dans le fichier, histoire de comparer tes listes avec ton fichier, au moins tu sera sure que ca ne viens pas de la .

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    En fait, quand j'affiche la console, je retrouve la totalité des données, mais en écriture les toutes dernières manquent toujours, elles n'y sont pas dans le fichier je comprends pas pourquoi..

  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
    tu peux faire le flush juste avant le close(), mais normalement un close() flush automatiquement.

    aussi, retire moi cette horreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	    catch (IOException e) {
    	                          }
    et remplace là par çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	    catch (IOException e) {
        e.printStackTrace();
    	                          }
    Sinon, en cas d'IOException, tu verra jamais l'erreur!

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci pour la remarque
    par contre j'ai rajouté le flush() mais ça ne change rien, toujours le mm problème

    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
     
    ................
    finally{
    	  try  {
    	    if (st2 != null)
               st2.flush();	    
               st2.close();
    	    if (st1 != null)
    	    st1.flush();    
                st1.close();
    	        }
    	    catch (IOException e) {
    	                          } 
    	  						}
    	  	return pr;
    	  }

  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
    la remarque a été faites mais pas prise en compte. Veux tu bien la prendre en compte, car si le flush déclenche une exception empechant l'écriture de la fin, j'aimerais bien savoir laquelle!!!

Discussions similaires

  1. lecture-ecriture de fichier en mode Random (Get - Put)
    Par MuShRo_Om dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/01/2006, 14h53
  2. Réponses: 2
    Dernier message: 09/01/2006, 09h04
  3. [SERVLET][JSP] Ecriture de fichier par la servlet
    Par Jabwoo dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/07/2004, 17h57
  4. Ne pas transformer les <br/> a l'ecriture du fichier X
    Par fidififouille dans le forum XMLRAD
    Réponses: 2
    Dernier message: 07/05/2004, 10h11
  5. Ecriture de fichier
    Par Walm dans le forum C
    Réponses: 4
    Dernier message: 10/09/2003, 15h08

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