2010-08-19 2 views
2

Il est tout à fait possible que j'ai mal compris le but de l'argument File dir dans Runtime.exec(String command, String[] envp, File dir): "Le répertoire de travail du nouveau sous-processus est spécifié par le répertoire Si dir est nul, le sous-processus hérite le répertoire de travail actuel du processus actuel. "Impossible de trouver le fichier en utilisant runtime.exec dir argument

Si je lance Runtime.exec("C:/mydir/myfile.bat"); le script est exécuté (même avec le répertoire de travail mal)

si je cours Runtime.exec("myfile.bat", null, new File("C:/mydir")); j'obtenir l'erreur suivante:

java.io.IOException: Cannot run program "myfile.bat" (in directory "C:\mydir"): CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at java.lang.Runtime.exec(Runtime.java:593) 

Je suppose que les ensembles d'arguments dir le répertoire de travail pour le nouveau processus ainsi que la commande en cours d'exécution, mais peut-être qu'il fait juste le premier. Si tel est le cas, le message d'exception est assez trompeur.

Répondre

3

Que diriez-vous

Runtime.exec("C:\mydir\myfile.bat", null, new File("C:\mydir")); 

De ProcessBuilder.java

// It's much easier for us to create a high-quality error 
// message than the low-level C code which found the problem. 

C'est pourquoi vous obtenez une exception non spécifique - sinon le JDK devront mettre en œuvre la gestion des exceptions similaires à la hiérarchie de DataAccessException Spring manipulation OS spécifique codes d'erreur.

Edit: vous voudrez peut-être regarder commons-exec

+0

Oui, je savais que ce serait la seule solution lors de l'écriture du poste ... merci pour le lien vers commons-exec - j'utilise à peu près tous les autres projets communs et ne savais pas à ce sujet !? – pstanton

0

Je ne sais pas si cela a quelque chose à voir avec ça, mais le \ est utilisé pour échapper des caractères.

J'utilise toujours des barres obliques en Java et elles sont correctement converties.

Sinon, je recommanderais d'utiliser toujours des doubles barres obliques pour éviter les erreurs comme "C: \ newfile" qui serait C: -newline-ewfile.

+0

oups désolé, ces cordes venaient 'File.getAbsolutePath' si mon code était juste (à cet égard), mon message a été mal .. édité. – pstanton

Questions connexes