Executer une ligne de commande windows en java

Executer une ligne de commande windows en java - Java - Programmation

Marsh Posté le 25-03-2017 à 13:54:54    

Salut
 
Je débute en java après avoir juste fait 3 bricoles en c++
 
Je voudrais être capable d'executer une ligne de commande de Windows dans un programme java
 
Ce code ne fonctionne pas.  Il est sensé faire un dir tout con, par la suite je veux pouvoir faire un shutdown /s /f /t 0  ou lancer un logiciel bref la ligne de commande windows quoi
 

Code :
  1. import java.io.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4.  // TODO Auto-generated method stub
  5.  String cmd = new String ("dir" );
  6.  Runtime rt = Runtime.getRuntime();
  7.  Process pr = rt.exec(cmd);
  8.  //pr.waitFor();  pour attendre la fin du process
  9. }
  10. }


 
J'ai cette erreur à la ligne 10 : unhandled exception type ioexception
 
Si vous pouvez m'aider c'est cool  :)  merci

Reply

Marsh Posté le 25-03-2017 à 13:54:54   

Reply

Marsh Posté le 28-03-2017 à 16:29:07    

Ton new String sert à rien.
 
dir n'est pas un exécutable, c'est une primitive du shell.
Essaie plutôt

Code :
  1. rt.exec("cmd /c dir" )


 
Mais bon c'est vraiment pas le bon langage pour faire ce genre de choses.


---------------
click clack clunka thunk
Reply

Marsh Posté le 28-03-2017 à 17:36:41    

Merci DDT
 
Je viens d'essayer ça me fait la même erreur : unhandled exception type ioexception
 

Code :
  1. import java.io.*;
  2. public class Main {
  3.   public static void main(String[] args) {
  4.     Runtime rt = Runtime.getRuntime();
  5.     rt.exec("cmd /c dir" );
  6.   }
  7. }


Reply

Marsh Posté le 28-03-2017 à 17:51:11    

https://www.jmdoudoux.fr/java/dej/c [...] ceptions-1

 

et je confirme que java n'est pas le langage pour faire ce genre de choses :/


Message édité par kadreg le 28-03-2017 à 17:51:32

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 29-03-2017 à 15:18:09    

Lt Ripley a écrit :

Merci DDT
 
Je viens d'essayer ça me fait la même erreur : unhandled exception type ioexception
 

Code :
  1. import java.io.*;
  2. public class Main {
  3.   public static void main(String[] args) {
  4.     Runtime rt = Runtime.getRuntime();
  5.     rt.exec("cmd /c dir" );
  6.   }
  7. }




 
Méthode courte (et crade !) : rajouter "throws IOException" juste avant l'accolade de la méthode "main".
 
Méthode un peu plus sérieuse: se demander quels sont les problèmes qui peuvent survenir lors de l'exécution de la commande. Quel répertoire faut-il afficher ? A-t-on toujours le droit de lister le contenu de ce répertoire ?
 Comment récupérer la sortie de la commande ? etc.. Une fois ces questions sérieusement posées et résolues "en français" on peut commencer à écrire le code java pour traiter l'exception.
 
 

Reply

Marsh Posté le 29-03-2017 à 18:37:40    

Merci leonhard !
 
J'ai conscience que je dois apprendre à "gérer" les erreurs, avec des throw / throws / try et catch etc, je dois revoir tout ça.
 
Je viens d'essayer la methode crade : plus d'erreur mais pas de console qui s'ouvre ni rien.
 
Bon, en c++ c'est simple
 

Code :
  1. system("Shutdown /s /f /t 0" );
  2. system("dir" );


Tout ça fonctionne niquel alors je me demandais en java...
 
Merci à tous  ;)

Reply

Marsh Posté le 30-03-2017 à 14:13:17    

Quand tu fais un Runtime.exec, tu récupère un objet Process qui te permets de lire la sortie standard
 
Cf. la doc https://docs.oracle.com/javase/7/do [...] ntime.html
 
PS : pour faire un shutdown, tu dois bien utiliser Runtime. Par contre pour lister les fichiers d'un répertoire il y a largement plus simple :
 

Code :
  1. File repertoire = new File("C:/" );
  2. File[] fichiers = repertoire.listFiles();


Reply

Marsh Posté le 30-03-2017 à 16:26:16    

Merci bidem
 
Grâce à toi je suis arrivé à faire un dir en ajoutant une boucle for qui parcourt l'objet fichiers et qui println
 
Le runtime je vais creuser

Reply

Marsh Posté le 31-03-2017 à 21:39:19    

Warf j'ai trouvé sur stack overflow un code qui fonctionne
 
Ça fonctionne pour faire un ipconfig ou lancer un exe (mais pas s'il faut une élévation)
 
Mais throws IOException est nécessaire, prochaine étape un bloc try catch
 

Code :
  1. // pour faire un ipconfig et l'afficher
  2. Process p = Runtime.getRuntime().exec("ipconfig" );
  3. BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
  4. String readline;
  5. while ((readline = reader.readLine()) != null) {
  6. System.out.println(readline);
  7.         }
  8.        
  9. // lancer un exe (s'il faut une élévation de droits ça ne marche pas)
  10. Runtime.getRuntime().exec("d:/infrarecorder" );


 
Edit : Bon eh bien avec un try catch ça fonctionne impec sans le throws
 

Code :
  1. }catch (IOException e) {e.printStackTrace();}


Message édité par Lt Ripley le 31-03-2017 à 21:54:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed