简体   繁体   中英

Java execute command line program

I have a little problem with executing a command line tool. I want to execute UnRAR.exe from WinRAR. I do it like this:

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

My problem is that the compressed file is password protected. If I execute the command in my console I'm asked for a password. If I let Java execute it the program just ends and never waits for a user input (the password).

I tried to write to the process outputstream but that didn't work. Is there anything I need to know about the behavior of command line programs executed in "different" environments?

EDIT: Maybe I wasn't clear enough. My question is: Is it possible to interact with a command line program with Java?

Works for me. Perhaps you didn't write a newline and flush the stream?

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 to your question, java.lang.Process was what I was looking for!

There are few methods to run process and interact with it.

There is Process class in java. It allows to get all 3 streams of subprocess (process called by your java app).

Process class in java help: link

Here you can find few examples of code, that executes process in java: link

However data from output and error streams will be available for you after process ends (your program will be "stopped" on line with .exec() method until subprocess ends).

To interact with running process you have to use another thread.

Using a thread to capture process output

Interacting with another process Java

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM