PDA

View Full Version : [Java] lanciare comando dos da classe e catturare l'output


stellinaInformatica
13-05-2011, 16:39
Ciao a tutti, sto combattendo da ieri con una situazione molto semplice ma che mi sta dando problemi... dunque, ho bisogno che da una classe java mi venga aperta una finestra di comando e mi venga eseguito un programmino esterno, nel mio caso dlv.
A dlv devo passare un file che verrā eseguito e per cui io voglio registrare l'output su un file.
Mettendo momentaneamente da parte la classe Java, se io apro la shell, vado in c, ed eseguo il seguente comando:

dlv.exe prova.txt

il risultato č questo:


{q1("Miller",38000,"New York"), q1("Koch",2000000,"Atlanta"), q1("Nguyen",35000,
"New York"), q1("Gruber",32000,"Atlanta"), q1b("Miller",38000,"New York"), q1b("
Koch",2000000,"Atlanta"), q1b("Nguyen",35000,"New York"), q1b("Gruber",32000,"At
lanta")}

ora vi mostro il codice che ho scritto in java per lanciare la shell e lo stesso comando scritto sopra:


String command = "cmd /c start dlv.exe -nofacts prova.txt ";
Runtime run= Runtime.getRuntime();

File fpath;
try {
fpath = new File( "C:");

Process processo = run.exec(command , null, fpath);
String line = "";

BufferedReader input = new BufferedReader(new InputStreamReader(processo.getInputStream()));

while ((line = input.readLine()) != null) {

System.out.println(line);


}

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}



in questo modo io mi aspetto che mi venga eseguito il tutto e mi venga stampato il risultato (linea dopo linea) sulla console. in realtā il mio obiettivo č di memorizzarlo su un file a parte, ma non riuscendoci sto facendo le cose passo dopo passo perchč sembra che non riesca proprio a catturare il risultato... dove sbaglio??
PS. dimenticavo di dirvi che quando lancio la classe java, la shell viene aperta ma si richiude in un secondo automaticamente.
Grazie a tutti !

redento
13-05-2011, 17:52
Prova ad aggiungere alla fine della stringa del tuo comando "&& pause" e controlla cosa succede.

Un'altra possibile soluzione č redirezionare l'output della shell direttamente su file e poi leggere quello. Puoi farlo aggiungendo, sempre alla fine della tua stringa, "> nomefile.txt".