Exécution d'une commande DOS dans un programme Java

Résolu
Sphaxounet0 Messages postés 20 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 27 avril 2012 - 28 févr. 2012 à 00:35
 Utilisateur anonyme - 1 mars 2012 à 08:12
Bonjour,

J'ai installé une librairie (pdftk) qui me permet d'effectuer une action sur un fichier PDF.
La commande pour l'exécution est
pdftk c:\users\Vincent\test.pdf dump_data output report.txt

Il lit le fichier test.pdf et extrait les métadonnées dans report.txt.

J'aimerai que cette commande soit exécutée via une application Java.
try{
    Runtime.getRuntime().exec("cmd.exe /k pdftk c:\\users\\Vincent\\test.pdf dump_data output report.txt " );
    } catch(Exception e){}


Mais le chemin du fichier sera donné par l'utilisateur dans un textfield, donc accessible via :
jTextField1.getText();


Comment faire pour que
try{
        Runtime.getRuntime().exec("cmd.exe /k pdftk jTextField1.getText() dump_data output report.txt " );
    } catch(Exception e){}
soit bien compris par la machine ?

Je vous remercie d'avance.

8 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 24
28 févr. 2012 à 09:01
Bonjour
au lieu de faire
Runtime.getRuntime().exec("cmd.exe /k pdftk jTextField1.getText() dump_data output report.txt " );

Fais ça.
Runtime.getRuntime().exec("cmd.exe /k pdftk " + jTextField1.getText() + " dump_data output report.txt " );


Bon après tu peux faire ça de manière un peu plus "propre".


Cdt
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
28 févr. 2012 à 08:57
Bonjour,

Commence par modifier deux choses :

- Dans le catch(Exception e){} ajoute un e.printStackTrace();

- Remplaces cmd.exe /k par cmd.exe /c

Et ca ira déjà mieux
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
28 févr. 2012 à 09:03
Qu'est ce que c'est que pdftk, le mot librairie est ambigue ici : normalement, une libraire, ca ne s'installe pas... C'est une librairie de commandes dos ou bien c'est un logiciel ?

Si c'est un exécutable, je ne pense pas que la commande pdftk soit dans le path, je te conseil donc de l'appeler directement en passant le chemin vers le dossier d'intallation :

runtime.exec('"'+dossierInstallation+"\\pdftk.exe"+'"');
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
28 févr. 2012 à 11:06
Ha oui, je n'avais pas vu ca, laurent1024 a raison, il faut sortir les noms des variables et des méthodes des "" sinon, rien n'est résolu.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sphaxounet0 Messages postés 20 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 27 avril 2012 2
29 févr. 2012 à 00:06
Merci à tous les 2 pour vos réponses pertinentes et rapides ! Elles m'ont bien aidé dans la compréhension de mon problème. :)

Et merci à laurent1024, c'était la solution que j'attendais !

@Julien39 : J'ai rajouté le "e.printStackTrace();" mais je n'ai pas bien saisi à quoi cela servait (je suis bien au courant que mon "Exception e" était un peu pourrie, mais je ne savais pas quoi mettre d'autre, je n'ai pas bien saisi le fonctionnement de ces exceptions).

J'ai laissé le /k plutôt que le /c pour m'assurer que toutes les commandes du exec() soient bien prises en compte.

Je ne suis pas non plus à l'aise avec le concept de librairie, mais j'ai mis un pdftk.exe ainsi qu'un dll dans system32 pour me permettre d'exécuter les commandes "pdftk arguments..." en DOS.
0
Utilisateur anonyme
29 févr. 2012 à 14:23
Au fait, pense à utiliser de préférences des chemins abo=solus car j'ai déjà des problèmes avec ces méthodes : les commandes étaient executée à partir de mon workspace.

Sinon ton e.printStackTrace(); sert à afficher le message d'erreur de ton exception. Si tu ne 'las pas mis, une exception peut être levée mais toi tu ne verras rien du tout. Alors que le e.printStackTrace(); te permet de voir un message d'erreur intéressant indiquant où il y a eu le problème.


--
Pylouq
0
Sphaxounet0 Messages postés 20 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 27 avril 2012 2
29 févr. 2012 à 17:27
Non justement j'utilise des chemins qui ont été entrés par l'utilisateur (c'est pour ça que j'utilise un assesseur).
Merci pour l'explication de l'exception.
0
Utilisateur anonyme
1 mars 2012 à 08:12
Pas de quoi^^
Pense à mettre ton sujet en résolu si tu n'as plus d'autres questions sur ce sujet :D


--
Pylouq
0