Vous pouvez utiliser java.lang.Runtime.exec
pour exécuter un code simple. Cela vous rend un Process
et vous pouvez lire directement sa sortie standard sans avoir à stocker temporairement la sortie sur le disque.
Par exemple, voici un programme complet qui vous montrera comment faire :
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class testprog {
public static void main(String args[]) {
String s;
Process p;
try {
p = Runtime.getRuntime().exec("ls -aF");
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("exit: " + p.exitValue());
p.destroy();
} catch (Exception e) {}
}
}
Une fois compilé et exécuté, il sort :
line: ./
line: ../
line: .classpath*
line: .project*
line: bin/
line: src/
exit: 0
comme prévu.
Vous pouvez également obtenir le flux d'erreurs pour l'erreur standard du processus, et flux de sortie pour l'entrée standard du processus, ce qui est assez déroutant. Dans ce contexte, l'entrée et la sortie sont inversées puisque c'est l'entrée de le processus à celui-ci (c'est-à-dire la norme sortie du processus).
Si vous souhaitez fusionner le traitement de la sortie standard et de l'erreur à partir de Java (par opposition à l'utilisation de l'option 2>&1
dans la commande actuelle), vous devriez vous pencher sur ProcessBuilder
.