Ich verwende mein Java-Programm vom Terminal und ich versuche, die Anzahl der Dateien in einem bestimmten Verzeichnis mit einem Linux-Befehl in meinem Code zu zählen; Ich habe es geschafft, die Ausgabe für alle anderen Befehle außer diesem zu bekommen.Java-Programm wird nicht vom Terminal ausgegeben
Mein Befehl lautet: ls somePath/*.xml | wc -l
Als ich meinen Befehl in meinem Code ausführen, scheint es, dass es nichts zu Ausgang hat, aber wenn ich exakt den gleichen Befehl im Terminal laufe funktioniert es ganz gut und gibt tatsächlich die Anzahl von XML-Dateien in diesem Verzeichnis.
Hier ist mein Code:
private String executeTerminalCommand(String command) {
String s, lastOutput = "";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println("Executing command: " + command);
while ((s = br.readLine()) != null){//it appears that it never enters this loop since I never see anything outputted
System.out.println(s);
lastOutput = s;
}
p.waitFor();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return lastOutput;//returns empty string ""
}
aktualisiert Code w/Ausgabe
private String executeTerminalCommand(String command) {
String s, lastOutput = "";
try {
Process p = new ProcessBuilder().command("/bin/bash", "-c", command).inheritIO().start();
//Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println("Executing command: " + command);
while ((s = br.readLine()) != null){
System.out.println("OUTPUT: " + s);
lastOutput = s;
}
System.out.println("Done with command------------------------");
p.waitFor();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("LAST OUTPUT IS: " + lastOutput);
return lastOutput;
}
Ausgang:
Executing command: find my/path -empty -type f | wc -l
Done with command------------------------
1
LAST OUTPUT IS:
vielleicht versuchen Process mit und tun 'pb.redirectErrorStream (true); ' –
Probieren Sie diesen Befehl aus:' Process p = new ProcessBuilder(). Befehl ("bash", "-c", "ls somePath/*. Xml | wc -l"). InheritIO(). Start(); ' –
Danke Jungs, aber leider Letzten Endes funktionierten diese nicht für mich. –