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 :

copier un fichier binaire ? (load/save dans le code)?


Sujet :

Entrée/Sortie Java

  1. #1
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut copier un fichier binaire ? (load/save dans le code)?
    Bonjour,

    Je progresse doucement mais surement, aussi je suis en train d'écrire une application TEST, pour tester des classes avant de passer sur la grosse version.

    La difficulté du jour ets simple à comprendre :
    une JFrame (swing) s'ouvre quand l'utilisateur cliques sur un bouton.
    Un menu fichier/ouvrir/enregister/retour est alors proposé.

    Au final l'utilisateur devra pouvoir prendre un fichier de n'importe (en toute logique une clef/un disque USB), pour le charger sur la machine.
    (le programme final sera la seule interface disponnible pour l'utilisateur...donc je ne peut en aucun cas faire appel a une commande systeme !)

    J'ai tester ceci juste les deux fonctions load/save) (sur un plan de tutorial trouvé sur gougoul juste adapté)
    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
     
     public boolean openFile () {
          JFileChooser fc = new JFileChooser ();
          fc.setDialogTitle ("Ouvrir un fichier");
          // Choose only files, not directories
          fc.setFileSelectionMode ( JFileChooser.FILES_ONLY);
          // Start in current directory
          fc.setCurrentDirectory (new File ("."));
          // Now open chooser
          int result = fc.showOpenDialog (this);
          if (result == JFileChooser.CANCEL_OPTION) {
              return true;
          } else if (result == JFileChooser.APPROVE_OPTION) {
              fFile = fc.getSelectedFile ();
          }
          return true;
       } // openFile
       public boolean saveFile () {
         File file = null;
         JFileChooser fc = new JFileChooser ();
         // Start in current directory
         fc.setCurrentDirectory (new File ("."));
         // Set to a default name for save.
         fc.setSelectedFile (fFile);
         // Open chooser dialog
         int result = fc.showSaveDialog (this);
         if (result == JFileChooser.CANCEL_OPTION) {
             return true;
         } else if (result == JFileChooser.APPROVE_OPTION) {
             fFile = fc.getSelectedFile ();
             if (fFile.exists ()) {
                 int response = JOptionPane.showConfirmDialog (null,
                   "Ecraser l'ancien fichier du meme nom ?","Confirmez ?",
                    JOptionPane.OK_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE);
                 if (response == JOptionPane.CANCEL_OPTION) {return false;}
             }
             return writeFile (fFile, fTextArea.getText ());
         } else {
           return false;
         }
      } // saveFile
    ceci permet donc de copier un fichier TEXTE en le chargeant dans un fTextArea.
    Je n'ai pas la moindre idée de la manière de faire pour gerer n'importe quel type de fichier ? (binaire/texte)

    Merci


    PS :
    --il doit bien exister une sorte de buffered-input qu'on puisse utiliser pour charger un bloc de mémoire ? ce qui ducoup me sauverai la mise...
    -ou mieux encore un copieur de bloc de donnees.... (encore faudrait il m'indiquer comment le lier au dit fichier )

    désolé mais je débute...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 111
    Points : 118
    Points
    118
    Par défaut
    Peut être la classe FileInputStream, si j'ai un peu compris le problème...
    Un geek, c'est quelqu'un qui croit qu'il y a 1024m dans 1km...

    Il y a 10 types de geeks, ceux qui savent compter en binaire et les autres...

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    décidément les réponses tombent vites...

    il semblerai que je puisse faire quelque chose avec ça... je vais tester cette solution pour voir si je peut y arriver...

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Grosso-modo :

    - les flux du style PrintStream, et tous les writer/reader (voir du cote de PrintWriter, LineNumberReader, etc. pour des usages plus evolues) sont dedies pour gerer du texte.

    - des flux de bas niveau avec possibilite lecture/ecriture byte a byte ou sur un byte[] ou RandomAccessFile c'est generalement du binaire.

    Voir aussi du cote des nio (FileChannel, ByteBuffer, etc.).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    J'ai fait comme ça pour un test :
    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
    private boolean copie(String str1, String str2) {
            boolean resultat = false ;
            java.io.FileInputStream sourceFile=null;
            java.io.FileOutputStream destinationFile=null;
            try {
                  new File(str2).createNewFile();
                sourceFile = new java.io.FileInputStream(str1);
                destinationFile = new java.io.FileOutputStream(str2);
                byte buffer[]=new byte[512*1024];
                int nbLecture;
                while( (nbLecture = sourceFile.read(buffer)) != -1 ) {
                    destinationFile.write(buffer, 0, nbLecture);
                }
            resultat = true;
            } catch( java.io.FileNotFoundException f ) {
            } catch( java.io.IOException e ) {
            } finally {
            try {
                sourceFile.close();
            } catch(Exception e) { }
            try {
                destinationFile.close();
            } catch(Exception e) { }
            }
        return(resultat);
    } //~copie
    et le lanceur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
     
            String str1 = "1.gif";
            String str2 = "3.gif";
            copie(str1,str2);
    }//~lanceur de copie
    ça fonctionne manifestement.. je pense que c'est assez propre non ?

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

Discussions similaires

  1. [PHP 5.0] Copier un fichier binaire
    Par darkterreur dans le forum Langage
    Réponses: 0
    Dernier message: 02/04/2010, 13h12
  2. Réponses: 11
    Dernier message: 18/06/2009, 10h04
  3. [WD10] Copier un fichier interne du projet dans un dossier externe
    Par nuFox dans le forum WinDev
    Réponses: 6
    Dernier message: 15/05/2009, 14h20
  4. Stocker et copier un fichier binaire
    Par poiuytrez dans le forum VBScript
    Réponses: 1
    Dernier message: 18/06/2007, 13h41
  5. copier un fichier du disque dur dans la ram
    Par orichimaru dans le forum C++
    Réponses: 9
    Dernier message: 29/11/2004, 17h45

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