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

Java Discussion :

Copie fichier depuis jar


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut Copie fichier depuis jar
    Bonjour,

    Je rencontre un soucis lors de la copie d'un fichier. Il s'agit d'un fichier texte tout ce qu'il y a de plus banal (petit fichier de properties perso). Je veux que mon application copie ce fichier, qui est situé dans l'application, sur la machine client.

    Là où cela se corse, c'est que j'aimerais dans la mesure du possible avoir ce comportement, que mon application soit lancée depuis Eclipse ou bien depuis un jar exécutable.

    Voici ce que je fais actuellement :

    Code maClasse.java : 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
     
     
    File fichierClient = new File("pathComplet/monFichier.properties");
    if (!fichierClient.isFile()) {
         // On ne copie le fichier que s'il n'est pas déjà présent
         sauvegarderFichier("pathComplet/monFichier.properties", 
               maClass.class.getResourceAsStream("pathCompletDansJar/monFichier.properties"));
    }
     
     
    // Et la fonction 'sauvegarderFichier' :
    public static void sauvegarderFichier(String _nomFichier,
    			InputStream _inputStream) throws IOException, FileNotFoundException {
         FileOutputStream fos = new FileOutputStream(_nomFichier);
         try {
              // On utilise un tableau comme buffer
              byte[] buf = new byte[8192];
              // Et on utilise une variable pour connaitre le nombre
              // de bytes lus, et donc le nombres qu'il faudra ecrire :
              int longueur;
     
              while ((longueur = _inputStream.read(buf)) >= 0) {
                   fos.write(buf, 0, longueur);
              }
         } finally {
             // On ferme le fichier quoi qu'il arrive :
            fos.close();
         }
    }

    (la méthode sauvegarderFichier provient de cette discussion).

    L'arborescence de mon projet est la suivante :

    - monProjet
    - src
    - properties
    - monFichier.properties
    - lib

    De ce fait, les deux chemins utilisés dans le code précédent sont de cet ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    C:\Documents and Settings\nomUser\monProjet\properties\monFichier.properties
    D:\Programmes\Eclipse\workspace\monProjet\properties\monFichier.properties
    En l'état, j'ai bien la création du fichier, mais avec rien dedans.
    J'ai essayé plusieurs solutions, mais dans tous les cas, cela ne fonctionnait pas depuis le jar.

    Mako.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hum. En principe, si le fichier est créé, vide ou non, c'est qu'il n'y a pas d'erreur avant. Et s'il n'y a pas d'erreur avant, il devrait être copié entièrement.

    Tu es sûr qu'il est pas simplement vide, dans ton .jar ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Tu es sûr qu'il est pas simplement vide, dans ton .jar ?
    Sûr.

    Il semblerait que l'InputStream soit nul.

    Est-ce que cela pourrait venir du fait que mon fichier se trouve dans un répertoire qui ne soit pas sous "src" ?

    Mako.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bon, j'ai trouvé une solution qui semble fonctionner.

    J'ai placé mon fichier dans un package java (par exemple : fr.coucou.monProjet.ressources), et je le récupère comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream inputStream = maClass.class.getResourceAsStream("/fr/coucou/monProjet/ressources/monFichier.properties");
    Puis je sauvegarde le fichier sur la machine comme je l'ai décrit dans mon premier post.

    Par contre, je ne trouve pas très "propre" de devoir placer mes fichiers de configuration au sein des sources java, et je suis assez étonné qu'il n'y ait pas moyen de récupérer un fichier dans le jar dans un dossier autres que les sources...

    En attendant, je passe en résolu, mais je suis toujours preneur d'une autre façon de faire.

    Mako.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Mako 5013 Voir le message
    Par contre, je ne trouve pas très "propre" de devoir placer mes fichiers de configuration au sein des sources java, et je suis assez étonné qu'il n'y ait pas moyen de récupérer un fichier dans le jar dans un dossier autres que les sources...
    Rien ne t'empêche de les mettre dans un "faux package" qui ne contient aucune source java, et qui contient uniquemenent des fichiers .properties. C'est ce qui se passe dans la bibli de base Java elle-même.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream inputStream = maClass.class.getResourceAsStream("/ressources/monFichier.properties");
    Dans ton projet, ça apparaîtra quand même sous le répertoire "src". Mais techniquement t'es pas obligé, tu peux aussi mettre tes ressources ailleurs et les ajouter au classpath.
    Mais bon, c'est pas vraiment un problème, au fond.


    (Au fait, bien joué pour avoir vu que quand une ressource n'existe pas, getResourceAsStream() renvoie null au lieu d'une exception dédiée. Je n'avais pas remarqué.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Rien ne t'empêche de les mettre dans un "faux package" qui ne contient aucune source java, et qui contient uniquemenent des fichiers .properties.
    C'est exactement ce que j'ai fais. Mais à la base, cela me dérangeait tout de même d'avoir un package avec des .properties qui se balade au milieu de mes sources. Mais...

    Citation Envoyé par thelvin Voir le message
    C'est ce qui se passe dans la bibli de base Java elle-même.
    ... C'est que ça ne doit pas être si mauvais que ça comme solution.

    Mako.

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

Discussions similaires

  1. Copie fichier depuis serveur distant + lecture mot à mot
    Par frhu13 dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 13/09/2012, 13h20
  2. copie de fichiers depuis le web
    Par krhyme dans le forum ASP
    Réponses: 1
    Dernier message: 05/06/2008, 22h36
  3. copie de fichier depuis internet vers pc
    Par krhyme dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/06/2008, 18h12
  4. copie d'un fichier depuis un post distant
    Par maverick56 dans le forum Réseau
    Réponses: 6
    Dernier message: 18/01/2008, 11h07
  5. [ Debutant ][ Jar ] Accès fichier externe depuis Jar
    Par Warz dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 22/05/2006, 11h32

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