2012-02-19 21 views
5

Ho un piccolo problema con l'esecuzione di uno strumento da riga di comando. Voglio eseguire UnRAR.exe da WinRAR. Lo faccio in questo modo:Java esegui il programma da riga di comando

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile()); 

Il mio problema è che il file compresso è protetto da password. Se eseguo il comando nella mia console, mi viene richiesta una password. Se permetto a Java di eseguirlo, il programma termina e non aspetta mai un input da parte dell'utente (la password).

Ho provato a scrivere sul processo outputstream ma non ha funzionato. C'è qualcosa che devo sapere sul comportamento dei programmi della riga di comando eseguiti in ambienti "diversi"?

MODIFICA: Forse non ero abbastanza chiaro. La mia domanda è: È possibile interagire con un programma a riga di comando con Java?

+0

ho aggiunto nuova risposta e cancellato vecchio. Spero che una nuova risposta ti soddisfi. – Kamil

risposta

10

Lavori per me. Forse non hai scritto una nuova riga e svuotare il flusso?

Process tr = Runtime.getRuntime().exec(new String[]{ "cat" }); 
Writer wr = new OutputStreamWriter(tr.getOutputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(tr.getInputStream())); 
wr.write("hello, world\n"); 
wr.flush(); 
String s = rd.readLine(); 
System.out.println(s); 

http://ideone.com/OUGYv

+1 alla tua domanda, java.lang.Process era quello che stavo cercando!

0

Esistono pochi metodi per eseguire il processo e interagire con esso.

C'è classe Process in Java. Permette di ottenere tutti e 3 i flussi di sottoprocesso (processo chiamato dalla tua app java).

classe Process in aiuto java: link

Qui potete trovare alcuni esempi di codice, che viene eseguito processo in Java: link

Tuttavia saranno disponibili i dati da flussi in uscita e di errore per voi dopo la fine del processo (il tuo programma sarà "fermato" in linea con il metodo .exec() fino al termine del sottoprocesso).

Per interagire con il processo in esecuzione è necessario utilizzare un altro thread.

Using a thread to capture process output

Interacting with another process Java

Problemi correlati