Exécuter des commandes de ligne de commande via Java
L'exécution de commandes externes à partir d'un programme Java peut être utile pour automatiser des tâches ou accéder aux fonctionnalités du système. Cependant, comme démontré dans la question initiale, la simple utilisation de Runtime.getRuntime().exec() peut ne pas produire le comportement souhaité, en particulier lors de l'interaction avec l'invite de commande Windows.
Pour résoudre ce problème, une solution plus avancée une approche est nécessaire. Comme suggéré dans l'article cité, une solution efficace consiste à réutiliser un processus pour exécuter plusieurs commandes. Le code suivant illustre cette technique :
String[] command = {"cmd"}; Process p = Runtime.getRuntime().exec(command); new Thread(new SyncPipe(p.getErrorStream(), System.err)).start(); new Thread(new SyncPipe(p.getInputStream(), System.out)).start(); PrintWriter stdin = new PrintWriter(p.getOutputStream()); stdin.println("dir c:\ /A /Q"); // Add additional commands here stdin.close(); int returnCode = p.waitFor(); System.out.println("Return code = " + returnCode); class SyncPipe implements Runnable { public SyncPipe(InputStream istrm, OutputStream ostrm) { istrm_ = istrm; ostrm_ = ostrm; } public void run() { try { byte[] buffer = new byte[1024]; int length; while ((length = istrm_.read(buffer)) != -1) { ostrm_.write(buffer, 0, length); } } catch (Exception e) { e.printStackTrace(); } } private final OutputStream ostrm_; private final InputStream istrm_; }
Explication :
Cette approche permet une exécution plus interactive des commandes sur l'invite de commande Windows à partir d'une application Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!