Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraire les données d'un fichier .jar ( en Java )

    20 octobre 2016 à 8:13:39

    Bonjour,

    le titre n'est pas très explicite donc je vous détails un peu ce que j'aimerais faire.

    Je code avec Eclipss, les dossiers de mon projet sont : src et image,

    mes dossier du projet

    J'aimerais faire en sorte qu'après avoir crée mon Executable (.jar),

    Lorsque je lance mon application, cela me crée un dossier "nomDuJar_image" au même endroit que l’exécutable , mais ce n'est pas le soucis car je sais PRESQUE faire cela :

    File dir = new File ( System.getProperty("user.dir")+"/image" ); dir.mkdirs();



    Je sais déjà comment récupérer le nom de l'éxécutable, même son chemin :

    File PathDuJar= new java.io.File(Accueil.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    String NomDuJar = new java.io.File(Accueil.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName();


    Mais je ne comprend pas comment extraire le dossier "image" qui se trouve dans l'executable, et envoyer son contenu dans le dossier "nomDuJar_image"...

    J'espère m'être bien exprimé,

    Aidez moi svp ! merci !

    -
    Edité par Flyzerd 20 octobre 2016 à 9:16:23

    • Partager sur Facebook
    • Partager sur Twitter
      20 octobre 2016 à 11:52:47

      Bonjour,

      Il faudrait déjà placer le dossier image dans src, pour l'avoir dans l'exécutable. ouvrer le jar avec 7zip (par exemple, pour vérifier qu'il a bien le fichier dedans).

      http://java.developpez.com/faq/javaio?page=Gestion-des-fichiers#LANGAGE_FICHIER_copier

      (J'espère avoir bien compris ^^).

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2016 à 22:43:09

        Salut ! Merci pour ta réponse !

        J'ai mis mes dossiers dans src, j'ai ouvert le .jar avec WinRar,

        et effectivement les dossier sont maintenant dedans (alors qu'auparavant mes fichiers étaient en bordel) 

        J'ai vite fais regarder ton lien et il m'a l'air super utile ! Je vais regarder tout sa !

        Merci beaucoup ! ( je ne passe pas encore en résolu le sujet car rien n'est terminé haha )

        EDIT : 

        Honnetement, ton lien est super intéréssant, j'ai pas encore tout vu,

        mais je ne pense pas qu'il y ai quelque chose qui m'aiderais a "Extraire" ou "Copier" le contenu de mon dossier "Image" qui se trouve dans mon .jar dans un autre dossier crée a l'ouverture de l'application...

        -
        Edité par Flyzerd 20 octobre 2016 à 23:07:53

        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2016 à 1:00:02

          import java.io.File;
          import java.io.IOException;
          import java.net.URISyntaxException;
          import java.nio.file.Files;
          import java.nio.file.Path;
          import java.nio.file.StandardCopyOption;
          import java.util.logging.Level;
          import java.util.logging.Logger;
          
          /**
           *
           * @author pctronique
           */
          public class JavaApplication9 {
          
              /**
               * @param args the command line arguments
               */
              public static void main(String[] args) {
                  try {
                      File source = new File(ClassLoader.getSystemResource("./images/126.jpg").toURI());
                      File destination = new File(System.getProperty("user.dir")+"/images/126.jpg");
                      copier(source, destination);
                  } catch (URISyntaxException ex) {
                      Logger.getLogger(JavaApplication9.class.getName()).log(Level.SEVERE, null, ex);
                  }
              }
              
              public static boolean copier(File source, File destination) {
                  destination.getAbsoluteFile().mkdirs();
                  return copier(source.toPath(), destination.toPath());
              }
              
              public static boolean copier(Path source, Path destination) { 
                  try {
                      Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING,
                              StandardCopyOption.COPY_ATTRIBUTES); 
                  } catch (IOException e) { 
                      e.printStackTrace(); 
                      return false; 
                  } 
                  return true; 
              }
              
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            21 octobre 2016 à 2:07:58

            Merci encore !

            J'ai réussi a implanté ton code dans le mien, j'ai rajouté une boucle For pour parcourir les images et chaque images est belle est bien copié quand je compile et lance l'appli.

            Mais quand je lance le .jar, c'est une autre histoire, il crée les dossiers que je veux, mais ne copie pas les images.. et donc n'ouvre pas l'application graphique que j'ai.. je trouve ça bizarre. 

            voici un peu une partie de mon code :

            File source,destination;
            try {
            	File PathDuJar= new java.io.File(Accueil.class.getProtectionDomain().getCodeSource().getLocation().getPath()+"/image");
            	File[] f = PathDuJar.listFiles();
            	for (int i = 0 ; i < f.length ; i++)
            	{
            		  if (f[i].isFile())
            		  {
            			source = new File(ClassLoader.getSystemResource("./image/"+f[i].getName()).toURI());
            			destination = new File(System.getProperty("user.dir")+"/data/image/"+f[i].getName());
            	                copier(source, destination);					  
            		  }
            	}
            } catch (URISyntaxException e2) {e2.printStackTrace();}


            Je n'ai pas modifié tes fonctions copier

            -
            Edité par Flyzerd 21 octobre 2016 à 2:27:50

            • Partager sur Facebook
            • Partager sur Twitter
              21 octobre 2016 à 11:37:29

              Je ne vois pas trop l'utilité de sortir les images, on peut directement les utiliser en ressource dans le code, sa évite que les utilisateurs les supprimer ou de les modifier.

              Dans le lien que j'ai fourni, il donnait une autre solution (à mon avis il devait avoir un null dans le code d'avant, pour la récupération de l'image) :

                      File destinationPath = new File(System.getProperty("user.dir")+"/images/");
                      destinationPath.mkdirs();
                      InputStream source = null;
                      try {
                          source = getClass().getResource("/images/126.jpg").openStream();
                          File destination = new File(System.getProperty("user.dir")+"/images/126.jpg");
                          copier(source, destination);
                      } catch (IOException ex) {
                          ex.printStackTrace();
                      } finally {
                          try {
                              if(source!=null) source.close();
                          } catch (IOException ex) {
                              ex.printStackTrace();
                          }
                      }
                  public static boolean copier(InputStream source, File dest) { 
                      try (InputStream sourceFile = source;  
                              OutputStream destinationFile = new FileOutputStream(dest)) { 
                          // Lecture par segment de 0.5Mo  
                          byte buffer[] = new byte[512 * 1024]; 
                          int nbLecture; 
                          while ((nbLecture = sourceFile.read(buffer)) != -1){ 
                              destinationFile.write(buffer, 0, nbLecture); 
                          }
                          destinationFile.close();
                          sourceFile.close();
                      } catch (IOException e){ 
                          e.printStackTrace();
                          return false; // Erreur 
                      } 
                      return true; // Résultat OK   
                  }

              Ensuite, il serait bien de l'ouvrir avec le terminal (ou l'invite de commande sur Windows, pour visualiser le message d'erreur).

              -
              Edité par pctronique 21 octobre 2016 à 11:38:29

              • Partager sur Facebook
              • Partager sur Twitter

              Extraire les données d'un fichier .jar ( en Java )

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown