Utiliser un exe intégré dans un jar

Fermé
baibounet29 Messages postés 376 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 24 octobre 2014 - 23 oct. 2014 à 21:48
baibounet29 Messages postés 376 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 24 octobre 2014 - 24 oct. 2014 à 13:12
Bonjour la communauté !

Voilà mon problème, j'ai créé un programme en JAVA (donc un jar pour l'exécuter) qui contient un fichier .exe ainsi que les .dll utiles pour le fonctionnement du .exe, mais je ne sais pas comment utiliser ça ! (autant pour les images je sais faire mais ça...).

Pour explication :
- mon .jar décompile plusieurs fichiers pour y analyser les données et les modifier si besoin.
- une fois cela fait j'utilise mon .exe (autre programme dont je ne suis pas le créateur), pour recompiler les fichiers (ligne de commande avec pour argument le nom du dossier contenant les fichiers à recompiler donc pas gui).

-> j'aimerais donc intégrer le .exe + les .dll pour les utiliser automatiquement via mon jar...

Peut on utiliser directement ces fichiers à l'intérieur du .jar ?
Ou dois-je extraire le .exe et compagnie pour pouvoir les utiliser (via runtime.exec("appli.exe param") par exemple...) ?

Je vous laisse me guider sur l'un de ces 2 choix ;)

J'espère que vous pourrez m'aider (sans trop vous prendre la tête ! ).

Merci à tous !
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 oct. 2014 à 21:59
Bonjour,

J'avoue n'avoir jamais fait le test, mais je pense pas qu'un exec fonctionnera directement dans le jar, à la rigueur on pourrait les stocker dans le jar puis les décompresser dans un répertoire temporaire sur le système pour ensuite faire l'exec.
Pour les dll, même principe, mais je ne ferais pas un exec, plutôt des native, ce sera plus performant.
0
baibounet29 Messages postés 376 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 24 octobre 2014 53
23 oct. 2014 à 23:30
OK,
Donc je vais me tourner vers le 2eme choix : exporter temporairement les fichiers dans un répertoire pour les utiliser.
Par contre, autant pour afficher des images importées dans mon jar je sais faire, autant pour exporter des fichiers non "image" dans un répertoire je sais pas faire...
Vous auriez des connaissances sur ce sujet ?
Merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 oct. 2014 à 00:33
Que ce soit une image ou n'importe quel autre type de fichier il n'y a pas de différence.

InputStream input = getClass().getResourceAsStream("myFile");

Après ton InputStream tu le lis en entier pour le réécrire dans ton dossier.

Mais fondamentalement ça paraît être une mauvaise idée de mettre un .exe dans un .jar
Il vaudrait mieux les livrer séparément, ce qui te permettrait aussi de livrer par exemple des binaires pour d'autres systèmes d'exploitation que Windows.
0
baibounet29 Messages postés 376 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 24 octobre 2014 53
Modifié par baibounet29 le 24/10/2014 à 14:08
Oui du coup j'avais fait ça,
par contre dernier problème (de débutant sans doute), Mes fichiers sont correctement exportés quand je test via eclipse, par contre mon jar ne me créé pas les fichiers....
Any Ideas ?
thx

Edit : Code de ma classe qui exporte tous les fichiers d'un package :


import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;

public class ExportPackageFiles{
File f ;
public ExportPackageFiles(String pack)
{

final Collection<File> all = new ArrayList<File>();
try {
String targetPackage = pack;
String targetPackagePath = targetPackage.replace('.', '/');
String targetPath = "/"+targetPackagePath;
//System.out.println(targetPath);

// récupération du chemin 'réel' du package
java.net.URL resourceURL = getClass().getResource(targetPath);
String packageRealPath = resourceURL.getFile();
File packageFile = new File(packageRealPath);

findFilesRecursively(packageFile, all, "");
File entryDirectory = new File(targetPackagePath);
entryDirectory.mkdirs();
// System.out.println(targetPath) ;

for (File file : all) {
// System.out.println(file.getName()) ;
InputStream in = getClass().getResource(targetPath + "/" + file.getName()).openStream();

FileOutputStream writer = new FileOutputStream(new File(targetPackagePath + "/" + file.getName()));
try {
Integer carac;
while ( (carac = in.read()) != -1 ) writer.write(carac);
writer.close();

} finally {
in.close();
}
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private static void findFilesRecursively(File file, Collection<File> all, final String extension) {
final File[] children = file.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.getName().endsWith(extension) ;
}}
);
if (children != null) {
for (File child : children) {
all.add(child);
findFilesRecursively(child, all, extension);
}
}
}
}
0