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

Langage Java Discussion :

Récupération d'un String d'un JFormattedTextField


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut Récupération d'un String d'un JFormattedTextField
    Bonsoir,

    J'ai une petite question qui va peut-être amené à une grande réponse ..

    J'ai un JFormattedTextField qui reçoit via un JFileChooser le chemin d'accès d'un répertoire.
    Dans mon code, j'effectue un getText sur ce JFormattedTextField et crypte le String(de retour) avec AES.
    La fonction d'encryption d'AES utilise comme paramètre un Byte[] et retourne un Byte[], ainsi je suis obligé d'utiliser getBytes pour passer le String à la fonction d'encryption.
    Ensuite, je stocke ce Byte[](que je vais appeller ici cryptedPath) dans un String en faisant :
    String s = "";
    for (int i = 0; i < cryptedPath.length; i++)
    s += (char)cryptedPath[i];
    Et pour finir, j'enregistre la classe sérialisé qui contient ce string dans un fichier.
    Le soucis, c'est qu'en faisant tout ça, quand je veux rechargé la classe à partir du fichier les chemins d'accès qui contenaient des caractères accentués ne sont pas bien supportés. Quand je réaffiche ces chemins d'accès, les caractères accentués ne s'affichent pas correctement(ils sont remplacés par d'autres caractères bizarre).

    Je précise que je suis sur kubuntu.
    Je pense personnellement que c'est du à la fonction getBytes. Cette fonction renvoi un byte quand il s'agit d'un caractère normal et 2 bytes quand il s'agit d'un caractère accentué. Du coup, quand je caste mes bytes en char, il n'affiche rien de bon.. forcément. Et je n'ai pas d'idées sur comment résoudre ce problème.

    Si vous pouviez m'aider, ce serait vachement cool.

    Merci.

    Bien à vous,

    Moi.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut
    J'ai oublié de vous mettre le code, je le fais de suite. J'ai enlevé ce qui n'était pas "utile".

    Création du JFormattedTextField et du JFileChooser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hChamp = new JFormattedTextField();
    hChoix = new JFileChooser();
    Demande à l'utilisateur de choisir un répertoire et l'enregistre dans hChamp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hChamp.setText(hChoix.getSelectedFile().getAbsolutePath());
    Récupère le contenu de hChamp et le stocke dans un String s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String s = hChamp.getText();
    Crypte s et stocke dans bCrypted
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bCrypted = aes.crypt(s.getBytes());
    Convertit le Byte[] bCrypted en un String sCrypted
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String sCrypted = "";
    for (int i = 0; i < bCrypted.length; i++)
    	sCrypted += (char)bCrypted[i];
    Sauvegarde de la classe(DataCrypt) qui contient ce string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjectOutputStream  out = new ObjectOutputStream(new FileOutputStream("./datas", false)); 
    out.writeObject((DataCrypt)this);
    Restauration de la classe et récupération de sCrypted
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FileInputStream fichier = new FileInputStream("./datas");
    ObjectInputStream ois = new ObjectInputStream(fichier);
    DataCrypt dc = (DataCrypt)ois.readObject(); 
    sCrypted = dc.sCrypted;
    Et pour terminer, décryption de sCrypted et affichage dans hChamp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    temp = new byte[sCrypted.length()];
    for (int j = 0; j < sCrypted.length; j++)
    	temp[j] = (byte)sCrypted.charAt(j);
    Byte[] byteDecrypted = aes.decrypt(temp);
    String stringDecrypted = "";
    for (int j = 0; j < byteDecrypted.length; j++)
    	stringDecrypted += (char)byteDecrypted[j];
    hChamp.setText(stringDecrypted);

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut
    Cela fait 2 jours que je suis dessus.
    J'ai trouvé la réponse à mon problème par le plus grand des hasards. Enfin "hasards".. J'ai penché pour cette solution sans vraiment trop y croire.
    Donc si quelqu'un sait pourquoi ça fonctionne, je suis très très très intéressé par la réponse. Bien que je vois grosso modo pourquoi ça fonctionne.

    J'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bCrypted = aes.crypt(s.getBytes());
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bCrypted = aes.crypt(s.getBytes("ISO-8859-1"));
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    temp = new byte[sCrypted.length()];
    for (int j = 0; j < sCrypted.length; j++)
    	temp[j] = (byte)sCrypted.charAt(j);
    Byte[] byteDecrypted = aes.decrypt(temp);
    String stringDecrypted = "";
    for (int j = 0; j < byteDecrypted.length; j++)
    	stringDecrypted += (char)byteDecrypted[j];
    hChamp.setText(stringDecrypted);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    temp = new byte[sCrypted.length()];
    for (int j = 0; j < sCrypted.length; j++)
    	temp[j] = (byte)sCrypted.charAt(j);
    Byte[] byteDecrypted = aes.decrypt(temp);
    String stringDecrypted = new String(byteDecrypted, 0, byteDecrypted.length, "ISO-8859-1");
    hChamp.setText(stringDecrypted);

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

Discussions similaires

  1. Récupération de plusieurs String dans un autre String
    Par ghosty177 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 02/03/2011, 15h24
  2. Récupération du type string
    Par Palsajicoco dans le forum Android
    Réponses: 6
    Dernier message: 06/03/2010, 11h35
  3. Récupération page en string
    Par M.Dolly dans le forum Général Python
    Réponses: 2
    Dernier message: 05/10/2009, 23h36
  4. Réponses: 3
    Dernier message: 02/06/2009, 19h41
  5. Réponses: 2
    Dernier message: 14/11/2008, 11h28

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