Exécution d'une commande DOS dans un programme Java [Résolu]

Messages postés
20
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
27 avril 2012
- - Dernière réponse :  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.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
11
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
244
0
Merci
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
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
244
0
Merci
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"+'"');
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
244
0
Merci
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.
Commenter la réponse de cs_Julien39
Messages postés
20
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
27 avril 2012
2
0
Merci
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.
Commenter la réponse de Sphaxounet0
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
20
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
27 avril 2012
2
0
Merci
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.
Commenter la réponse de Sphaxounet0
0
Merci
Pas de quoi^^
Pense à mettre ton sujet en résolu si tu n'as plus d'autres questions sur ce sujet :D


--
Pylouq
Commenter la réponse de Utilisateur anonyme