4 votes

Exécution d'un programme externe avec la variable de chemin définie en Java?

Je cherche à exécuter un programme externe via la ligne de commande, mais j'ai découvert que je ne peux le faire que si le programme existe dans le répertoire à partir duquel je l'appelle. J'aimerais pouvoir exécuter le programme à partir de n'importe quel répertoire.

J'ai défini la variable Path pour Windows (7) et je suis capable d'exécuter le programme à partir de n'importe quel répertoire manuellement avec la ligne de commande ; cependant je ne peux pas le faire via Java.

Code pertinent :

 Runtime rt = Runtime.getRuntime();

 Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});

Mon problème est que la sortie du programme ci-dessus produit un fichier au nom générique "log.txt". Cela posera des problèmes lors du threLancement de mon programme. S'il est impossible d'utiliser la variable de chemin, je peux alternativement copier le programme dans le nouveau répertoire et le supprimer ensuite. J'aimerais éviter de le faire.

Modifier : Le code ci-dessus fonctionne car GetLog.exe se trouve dans C:\AutomateKPI. Je voudrais faire référence à la variable %PATH% pour pouvoir exécuter GetLog.exe à partir de C:\AutomateKPI\*NewDir*

5voto

pb2q Points 28514

Essayez d'utiliser ProcessBuilder. Il vous permet de spécifier le répertoire de travail :

String commandPath = "C:" + File.pathSeparator +
                     AutomateKPI" + File.pathSeparator + "GetLog.exe";
ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP);
pb.directory(new File("intendedWorkingDirectory"));
Process p = pb.start();

Ou, si C:\AutomateKPI est dans votre %PATH%:

ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP);

Il n'est pas clair dans la documentation, mais ProcessBuilder semble localiser les choses de manière similaire au système, par exemple en utilisant %PATH% sur Windows.

0voto

PulsePanda Points 507

Eh bien, tant que vous connaissez le chemin du programme que vous ouvrez et que vous n'avez pas à utiliser cmd, cela devrait fonctionner à chaque fois :

Fichier fichier = nouveau Fichier("Répertoire du fichier");
Bureau dt = Desktop.getDesktop();

essayer {
    dt.open(fichier);
} catch (IOException e1) {
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X