J'essaie d'être bon marché et d'exécuter une commande système locale (uname -a
) en Java. Je cherche à récupérer la sortie de uname
et à la stocker dans une chaîne. Quelle est la meilleure façon de procéder? Code actuel:
public class lame {
public static void main(String args[]) {
try {
Process p = Runtime.getRuntime().exec("uname -a");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch(IOException e1) {}
catch(InterruptedException e2) {}
System.out.println("finished.");
}
}
Votre chemin n'est pas loin de ce que je ferais probablement:
Runtime r = Runtime.getRuntime();
Process p = r.exec("uname -a");
p.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = b.readLine()) != null) {
System.out.println(line);
}
b.close();
Gérez les exceptions dont vous vous souciez, bien sûr.
C'est la meilleure façon de procéder. Vous pouvez également utiliser le ProcessBuilder qui a un constructeur d'argument variable, de sorte que vous pouvez enregistrer une ou deux lignes de code
Ce que vous faites semble bien. Si votre commande ne renvoie qu'une seule chaîne, vous n'avez pas besoin de la boucle while, stockez simplement la valeur reader.readLine () dans une seule variable String.
En outre, vous devriez probablement faire quelque chose avec ces exceptions, plutôt que de simplement les avaler.
Je sais que c'est très vieux mais quand même ...
Lire l'article ici: http://www.javaworld.com/article/2071275/core-Java/when-runtime-exec---won-t.html
Je crois comprendre que vous devez d'abord lire les flux de sortie et d'erreur de votre commande exécutée, puis seulement waitFor
la valeur de retour de votre processus.