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 :

lecture et écriture dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut lecture et écriture dans un fichier
    Bonsoir à tous,

    je cherche à écrire puis lire dans un fichier, voici mon code

    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
    public static void ecritureByte(byte[] tabByte, String fic) throws Exception
    	{
    		FileOutputStream fos=null;
    		try
    		{
    			fos = new FileOutputStream(fic);
    			BufferedOutputStream fils = new BufferedOutputStream(fos);
    			DataOutputStream dataOut = new DataOutputStream(fils);
     
    			for(int i =0; i<tabByte.length; i++)
    			{	
    			            System.out.println(new Byte(tabByte[i]).intValue());
    				dataOut.writeByte(tabByte[i]);
    			}
     
    			dataOut.close();
    			fils.close();
    			fos.close();
     
    		}
    		catch(Exception e)
    		{	}
     
    	}
     
    public static String lectureByte(String fic) throws Exception
    	{
    		FileInputStream fis=null;
    		System.out.println("----------------------");
    		try
    		{
    			fis = new FileInputStream(fic);
    			BufferedInputStream buf = new BufferedInputStream(fis);
    			DataInputStream dataIn = new DataInputStream(buf);
     
    	                         while(dataIn.read()!=-1)
    			{
    				System.out.println(dataIn.readByte());
    			}
     
    			dataIn.close();
    			buf.close();
    			fis.close();
     
    		}
    		catch(FileNotFoundException e)
    		{	}
    Voici ce que je récupère :
    7
    97
    49
    12
    113
    -17
    5
    0
    ----------------------
    97
    12
    -17
    0
    est-ce que quelqu'un saurait m'expliquer le problème s'il vous plait, trouver où est l'erreur pour me l'expliquer!!!

    Merci d'avance pour vos réponses

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    1 Tu ne gère pas les exceptions ! mets un printstacktrace au moins !
    2 le close se fait dans un bloc finally.

  3. #3
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    Helas cela ne vient pas de là, j'ai fait les changements que tu m'as indiqué, mais mon programme ne fonctionne toujours pas!

    D'autres idées...

  4. #4
    Llo
    Llo est déconnecté
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 16
    Par défaut
    Bonjour,

    C'est étrange. Tes traces laissent penser que tu n'as qu'un nombre sur deux dans ton flux.

    Une des possibilités serait que ta boucle d'écriture balaye deux occurences avant d'écrire. Donc, peut-être que les lignes suivantes provoque chacune l'incrémentation de l'indice de ton tableau?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println(new Byte(tabByte[i]).intValue());
    dataOut.writeByte(tabByte[i]);
    Tu peux afficher i avant et entre les deux lignes pour voir si sa valeur change.

    Essaie peut-être en plaçant la valeur lue dans une variable temporaire pour être sûr que ce n'est pas de là que vient ton problème et que tu ne manipules bien qu'une donnée par itération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    byte byteTemp = tabByte[i]; 
    System.out.println(new Byte(byteTemp).intValue());
    dataOut.writeByte(byteTemp);
    Bon courage

  5. #5
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    Mon problème était au moment de la lecture puisque je faisais un read() puis un readByte().
    Mon problème maintenant est que je ne sais pas comment arreter la lecture. Je pensais donner une valeur de fin à un octet (-128 par exemple) mais je peux avoir absolument toutes les valeurs possibles pour un octet (dont le -128). Je suis donc bloquée, si quelqu'un a une idée.

    Je vous remet mon nouveau code d'écriture:
    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
    public static byte[] lectureByte(String fic) throws Exception
    	{
    		FileInputStream fis = null;
    		BufferedInputStream buf = null;
    		DataInputStream dataIn = null;
    		Vector<Byte> vecByte = new Vector<Byte>();
    		byte[] tabByte;
    		
    		try
    		{
    			/* on crée un Buffer d'écriture grâce à l'objet BufferedWriter 
    			 * qui prend en entrée un FileWriter qui ouvre le fichier de sorti */
    			fis = new FileInputStream(fic);
    			buf = new BufferedInputStream(fis);
    			dataIn = new DataInputStream(buf);
    			
    			/* grâce au buffer on écrit le code (aEcrire) dans le fichier */
    			byte bit=0;
    			while((bit=dataIn.readByte())!=-128)
    			{
    				vecByte.add(bit);
    			}
    			
    			 tabByte = new byte[vecByte.size()];
    			int i = 0;
    			for(byte b : vecByte)
    			{
    				tabByte[i] = b;
    				i++;
    			}
    			
    		}
    		catch(FileNotFoundException e)
    		{
    			e.printStackTrace();
    		}
    je vous remercie d'avance!!

  6. #6
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour
    pourquoi tu remet pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((bit=dataIn.readByte())!=-1)
    @+

  7. #7
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    Malheureusement il est possible que je récupère -1 et que ce ne soit pas la fin de mon fichier. Les bits qui sont dans ce fichier me servent à coder des caractères ASCII (donc entre 0 et 255) mais Byte ne va que de -128 à 127, j'ai donc fait un calcul qui peut me renvoyer -1.

  8. #8
    Llo
    Llo est déconnecté
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 16
    Par défaut
    DataInputstream possède une méthode readUnsignedByte() qui renvoie un int avec une valeur comprise entre 0 et 255.
    Est-ce que tu ne peux pas utiliser cette méthode afin résoudre ton problème de fin de fichier?

  9. #9
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    je n'ai pas essayé avec readUnsignedByte() , mais je pense que mon problème reste le même puisque je ne pourrais renvoyer -1, il le changerait en int entre 0 et 255, donc il serait confondable avec un autre.

    Pour résoudre mon problème, en début de fichier j'inserts le nombre d'octets présents dans le fichier et je fais une boucle sur ce nombre. Ce n'est pas le moyen le plus optimisé, mais ça fonctionne.

    Merci à tous et bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/05/2010, 11h40
  2. Lecture et écriture dans un fichier XOML
    Par SoftAbdou dans le forum Windows Workflow Foundation
    Réponses: 5
    Dernier message: 14/08/2009, 01h04
  3. lecture et écriture dans un fichier Excel
    Par chebmo90 dans le forum Débuter
    Réponses: 5
    Dernier message: 05/08/2009, 15h15
  4. Lecture et écriture dans un fichier .CSV
    Par yann87 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 03/03/2009, 09h04

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