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 :

Conversion fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut Conversion fichier
    Bonjour,

    j'aimerais savoir comment récuperer sous un fichier texte le code binaire d'une image jpeg ?

    Du moins :
    - pouvoir "ouvrir" une image et copier le code dans son integralité.
    - Pourvoir réutiliser ce code pour l'afficher en image normale.

  2. #2
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Toujours pareil...
    comment récuperer les données binaires d'un fichier jpg ou bmp ?

    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
     
    import java.io.BufferedWriter;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
     
    /*
     * Created on 26 oct. 2005
     *
     * To change the template for this generated file go to
     * Window>Preferences>Java>Code Generation>Code and Comments
     */
     
    /**
     * @author rchaperon
     *
     * To change the template for this generated type comment go to
     * Window>Preferences>Java>Code Generation>Code and Comments
     */
    public class FileConverter 
    {
     
    	public static void main(String[] args) 
    	{
     
     
    		File out = new File("result.txt");
    		File in = new File("oeil.bmp");
     
     
    		try
    		{
    			DataInputStream entree= new DataInputStream(new FileInputStream(in)); 
    			BufferedWriter bw=new BufferedWriter(new FileWriter(out)); 
    			for(int i=0;i<in.length();i++)
    			{ 
    				bw.write(entree.readUTF()); 
    				bw.flush();
    			} 
    				bw.close();
    				System.out.println("ok terminé.");
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
     
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.io.UTFDataFormatException
    	at java.io.DataInputStream.readUTF(Unknown Source)
    	at java.io.DataInputStream.readUTF(Unknown Source)
    	at FileConverter.main(FileConverter.java:37)

  3. #3
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Pourquoi fais-tu un readUTF() ? Fais de simples read().

  4. #4
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Gfx
    Pourquoi fais-tu un readUTF() ? Fais de simples read().
    Bonjour Gfx;
    Tu vas peut-être, une fois de plus, être mon sauveur...

    J'ai tout tenté : readUTF(), read(), readByte(), etc...
    Cela ne me renvois jamais un fichier en binaire !
    Et de plus, dans tous les cas, il manques des symboles même si je fais une simple copie, et l'image du coup n'est pas relisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          File out = new File("resultOeil.bmp"); 
          File in = new File("oeil.bmp");
    Bref, moi ce que je souhaiterais, c'est avoir la suite de "0" et de "1" équivalent à un fichier jpg ou bmp...

  5. #5
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataInputStream entree= new DataInputStream(new FileInputStream(in)); 
    InputSource source=new InputSource(entree);
    DataInputStream sourceByte=source.getBytes();
    et après tu fais le traitement non plus sur entree mais sur sourceByte, avec une boucle sur un readByte() au lieu d'un readUTF().

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ce code marche :

    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
          File out = new File("result.png");
          File in = new File("ubuntu.png");
     
     
          try
          {
             BufferedInputStream entree= new BufferedInputStream(new FileInputStream(in));
             BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream(out));
     
             int read = -1;
             byte[] b = new byte[32 * 1024];
             while ((read = entree.read(b, 0, b.length)) != -1) {
                bw.write(b, 0, read);
             }
     
     
             bw.flush();
             bw.close();
             System.out.println("ok terminé.");
          }
          catch(Exception e)
          {
             e.printStackTrace();
          }
    Mais si tu veux faire un fichier texte "lisible" pour un humain l'image ne pourra pas etre affichee. D'autant plus que les Reader et Writer sont faits pour ecrire du texte et pas du binaire.

    Du coup je ne comprends pas trop ce que tu veux faire ^^

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ah attends tu veux un fichier texte qui contient uniquement des caracteres '0' et '1' ? C'est tres different a faire et tu ne pourras de toute facon pas afficher l'image depuis le fichier cree. Tu devras faire un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // lire un byte dans b
    for (int i = 0; i < 8; i++) {
      sortie.write((b >> i) & 0x1 == 1 ? '1' : '0');
    }
    Il y a surement plus efficace mais ca devrait marcher.

  8. #8
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Gfx
    Ah attends tu veux un fichier texte qui contient uniquement des caracteres '0' et '1' ? C'est tres different a faire et tu ne pourras de toute facon pas afficher l'image depuis le fichier cree. Tu devras faire un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // lire un byte dans b
    for (int i = 0; i < 8; i++) {
      sortie.write((b >> i) & 0x1 == 1 ? '1' : '0');
    }
    Il y a surement plus efficace mais ca devrait marcher.
    En fait un collègue souhaite utiliser un programme de chiffrement que j'ai développer il y a quelques années (au départ pour chiffrer des messages), et il voudait que mon programme puisse chiffrer des fichiers.

    J'essaye donc de trouver un moyen de récuperer toutes les données d'un fichier image afin de chiffrer ces données, pour ensuite pouvoir les déchiffrer et réafficher l'image.

    Le problème est que si je prend les données tel quel (un fichier jpg ouvert sous wordpad), certains symboles ne sont pas copiés dans le presse papier ! (tu fais un couper/coller dans un même fichier jpg, et ton image ne s'affiche plus)

    Voila mon problème.

  9. #9
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ah ok, oui bon ben evidemment ^^ Un fichier dit binaire contient des suites de bits qui ne peuvent pas etre interpretees comme des caracteres imprimables. Bref, soit tu lis le fichier et tu le chiffres sans le convertir, donc tout depuis ton programme, soit tu convertis le fichier dans un format comme le Base64 avant de le chiffrer. Mais il n'y a pas d'interet a faire cela. Bref modifie ton soft de chiffrement pour qu'il agisse sur des bytes et non des char, et lis les donnees directement depuis le fichier en lieu et place d'une zone texte ou autre.

  10. #10
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    C'est exactement ce que j'essaye de faire....
    Mais c'est chaud de parvenir à récuperer le "texte" des données pour les chiffrer...

  11. #11
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Mais heu non. Pourquoi tu veux recuperer une version en texte ? Travaille directement sur les donnees binaires.

  12. #12
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Gfx
    Mais heu non. Pourquoi tu veux recuperer une version en texte ? Travaille directement sur les donnees binaires.
    Mon programme n'accepte que les String....

    Et je n'ai pas envie de tout retoucher!

  13. #13
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ben tu peux creer une String a partir d'un tableau de byte[]. Tu peux aussi utiliser les algorithmes de chiffrage fournis dans le JDK.

  14. #14
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Gfx
    Ben tu peux creer une String a partir d'un tableau de byte[].
    Tout à fait et ça à l'air de marcher !!!
    Citation Envoyé par Gfx
    Tu peux aussi utiliser les algorithmes de chiffrage fournis dans le JDK.
    Je me suis lancé le défi d'utiliser mon programme perso, quand j'ai vu que j'avais du mal !

  15. #15
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Bon les nouvelles du front:

    Le chiffrement fonctionne.
    Mais j'aimerais qu'il me copie le fichier résultat au même endroit que le fichier source en le renommant.

    Par exemple, si l fichier source se nomme "/machin/monrep/Sample02.bmp", que le fichier résultat soit nommé "/machin/monrep/Sample02-Cryptor.bmp".

    Comment récuperer le classPath du fichier source (la methode getAbsolutePath() retournant le classPath du fichier + son nom) ?
    Comment nommer un fichier en fonction du nom d'un autre fichier ?

    ..Gfx ?
    ..je déconne, toutes les réponses sont les bienvenues.

  16. #16
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Utilise simplement getParent().getAbsolutePath() pour avoir le chemin du repertoire contenant le fichier. Ensuite utilise getName() pour avoir le nom du fichier. Enfin, avec le nom, fais un lastIndexOf('.') pour recuperer la position de l'extension puis des substring() pour recuperer le nom sans l'extension et l'extension en inserant entre les deux ton -Cryptor.

    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String name = source.getName();
    int index = name.lastIndexOf('.');
    name = name.substring(0, index) + "-Cryptor" + name.substring(index);
    File nouveauFichier = new File(source.getParent(), name);
    Pas teste mais ca devrait marcher (ou pas .

  17. #17
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    J'avais trouver comment renommer le fichier, sachant que pour la suite il était plus judicieux de mettre le "-Cryptor" devant.
    C'est le "new File(in.getParent(),nom);" qui me manquait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File in = new File(classPath);
    			String name = in.getName();
    			String nom = "Cryptor-"+name;
    			File out = new File(in.getParent(),nom);
    Merci encore, maitre Yoda.
    moi jeune padawan...

  18. #18
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Il me reste un souçi:

    le code suivant me provoque 3 lectures consécutives alors qu'il faudrait qu'il lise l'ensemble des données en 1 seule fois !
    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
    		KeyCross k = new KeyCross();
    		String secretKey = k.KeyCrossing(clePub,clePriv);
     
    		DesEncoding desencoding = new DesEncoding();
    		try 
    		{
    			File in = new File(classPath);
    			String name = in.getName();
    			String nom = name.replaceAll("Cryptor-","Result-");
    			File out = new File(in.getParent(),nom);
    			System.out.println(classPath);
    			System.out.println(out.getAbsolutePath());
    			FileInputStream fin= new FileInputStream(in);
    			FileWriter fo = new FileWriter(out); 
     
    			byte buffer[]=new byte[512*1024];
    			int nbLecture;
    			while( (nbLecture = fin.read(buffer)) != -1 ) 
    			{
    				String s = new String(buffer, 0, nbLecture);
    				desencoding.read(s);
    				desencoding.setFileValeurProgress(progress);//on fixe la valeur maximum de la ProgressBar en fonction du message à crypter
    				desencoding.codeLecture(secretKey,this,ihm);
     
     
    			System.out.println("on décode!");
    			} 
     
     
    			String messageClair=DeCodage.getFuturFile();
    			fo.write(messageClair);
     
    		   fo.flush();
    		   fo.close(); 
    		   fin.close();
    		   JOptionPane.showConfirmDialog(ihm,"Décodage du fichier terminé!","Décodage de fichier",JOptionPane.OK_CANCEL_OPTION,JOptionPane.ERROR_MESSAGE);

  19. #19
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Utilise un StringBuffer pour concatener les donnees et decrypte tout a la fin...

  20. #20
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Gfx
    Utilise un StringBuffer pour concatener les donnees et decrypte tout a la fin...
    Non, j'ai simplement regler la longueur du Byte[] en fonction de la longueur du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[] b = new byte[(int) in.length()];

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

Discussions similaires

  1. Conversion fichier .IGS
    Par klem001 dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/02/2007, 18h14
  2. Conversion fichier .bak en .txt
    Par memed dans le forum Oracle
    Réponses: 2
    Dernier message: 28/12/2006, 09h03
  3. Conversion fichier plat vers CSV
    Par linar009 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/11/2006, 13h35
  4. conversion fichier
    Par Bibouda dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 06/11/2005, 21h47
  5. Conversion fichiers
    Par biaggi dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2004, 17h57

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