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

avec Java Discussion :

Java: Probleme ASCII


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 42
    Points : 28
    Points
    28
    Par défaut Java: Probleme ASCII
    Bonjour à tous!

    Voilà j'ai un petit problème, dans ma fonction sauvegarder, j'écris dans un fichier la valeur 4 au début.
    Quand je veux la récupérer avec la fonction charger, cela reprend la valeur 52 au lieu de 4! (52=4 en ASCII)

    Voila le code en question:

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    package test;
     
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
     
     
    public class Test {
     
     
    public static void sauvegarder(char tab[],int taille){
     
    		File f=new File("sauvegarde.txt");
     
    		try
    		{
    		    PrintWriter fw = new PrintWriter(new BufferedWriter(new FileWriter (f)));
     
    		    fw.println (taille);
     
     
    		    for(int i=0;i<taille*taille;i++){
     
     
    		    		fw.print ((tab[i]));
     
    		    	if((i+1)%taille==0)
    		    		fw.println ();
    		    }
     
    		    fw.close();
    		}
    		catch (IOException exception)
    		{
    		    System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
    		}
    	}
     
     
    public static char[] charger(){
     
    	int c=0;
    	int i=0;
    	int taille;
    	try
    	{
    		FileReader fr = new FileReader ("sauvegarde.txt");
    	    taille =(int)  fr.read();
    	    System.out.println(taille);
    	    char[] tab=new char[taille*taille];
     
    	    while (c != -1)
    	    {
    	    	c = fr.read();
    	        tab[i]=((char) c);
    	        i++;
     
    	    }
     
    	    fr.close();
     
    		return tab;
     
    	}
    	catch (IOException exception)
    	{
    	    System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
    	}
    	return null;
     
     
     
    }
     
     
    	public static void main(String[] args){       
     
    		int taille=4;
    		char tab[]={'W','B','.','.','.','.','.','.','.','.','.','.','.','.','.','.'};
    		sauvegarder(tab,taille);
     
    		char tab2[]=new char[taille*taille];
    		System.out.println(tab2.length);
    		tab2=charger();
    		System.out.println(tab2.length);
    		for(int i=0;i<taille*taille;i++)
    			System.out.print(tab2[i]+ " ");
     
    	}
     
    }

    Et cela affiche:


    16
    52
    2704

    W B . .
    . . . .
    . . . .
    16 correspond à la taille du tableau (4x4)
    52 à la valeur 4 en ascii qui est donc mauvaise.
    et 2704 la taille du tableau après application de la fonction charger (52x52)

    Comment faire pour récupérer 4 et non 52??

    Merci bcp

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonsoir,
    Bien que votre méthode de sauvegarde ne soit pas très propre, elle fonctionne et génère bien le fichier que vous voulez. Pour le vérifier, il vous suffit d'ouvrir "sauvegarde.txt" avec notepad par exemple, et vous verrez par vous-même que le fichier que fabrique votre méthode est correcte.
    Donc, c'est votre méthode de lecture qui n'est pas bonne.

    Voici un exemple de code qui fonctionne :

    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
    private static char[] charger() {
            try {
                BufferedReader fr = new BufferedReader(new FileReader ("sauvegarde.txt");
    	    System.out.println(fr.readLine());
                String valeur = new String();
                while (fr.ready()) {
                    valeur += fr.readLine();
                    }
    	    fr.close();
                return valeur.toCharArray();
                }
    	catch (IOException exception){
    	    System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
                }
    	return null;
            }
    Ce code devrait vous permettre de comprendre, donc je vous laisse regarder.
    Lorsque vous sollicitez la méthode de lecture read() de votre FileReader, cette dernière renvoie un int. Donc, caster un Integer en Integer ne sert à rien, et si FileReader.read() renvoie un entier, c'est normal puisqu'il s'agit d'un code ASCII. Pour autant, vous ne l'interprétez pas en tant que caractère, mais en tant que valeur numérique, et paff, c'est comme si vous aviez écris "taille = 52;"
    Ce qui est troublant, c'est que pour l'écriture, vous écrivez votre fichier ligne par ligne, alors pourquoi le lire caractère par caractère ?
    C'est pourquoi dans la solution que je vous propose je m'applique simplement à lire ce fichier avec la bonne classe, BufferedReader, qui me permet de le lire ligne par ligne. Je cumule chaque ligne lue dans une chaine. En effet, lq classe String de Java propose la méthode toCharArray qui comme son nom l'indique renvoie pile-poil ce que vous voulez, un tableau de caractère.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. [JAVA] Probleme de connexion a ACCESS via une Servlet.
    Par rider4ever dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 18h45
  2. [FLASH 8][openAMF][remote][java]probleme d'import
    Par Invité dans le forum Flash
    Réponses: 5
    Dernier message: 02/12/2005, 17h51
  3. [java]probleme de case dans switch
    Par mousstik dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2005, 16h27
  4. Debutant en JAVA, problème avec 1er programme
    Par Gymerus dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/09/2005, 12h10
  5. Réponses: 2
    Dernier message: 16/08/2005, 09h21

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