Java执行命令行程序

时间:2012-02-19 02:18:09

标签: java command-line

我在执行命令行工具时遇到了一些问题。我想从WinRAR执行UnRAR.exe。我是这样做的:

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

我的问题是压缩文件受密码保护。如果我在控制台中执行命令,则会要求输入密码。如果我让Java执行它,程序就会结束,永远不会等待用户输入(密码)。

我试着写进程流输出但是没有用。在“不同”环境中执行的命令行程序的行为是否需要了解?

编辑:也许我不够清楚。我的问题是:是否可以使用Java与命令行程序进行交互?

2 个答案:

答案 0 :(得分:11)

适合我。也许你没有写新行并刷新流?

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你的问题,java.lang.Process正是我所寻找的!

答案 1 :(得分:0)

运行流程并与之交互的方法很少。

java中有Process个类。它允许获取所有3个子进程流(由java应用程序调用的进程)。

java帮助中的流程类:link

在这里,您可以找到几个代码示例,它们在java中执行流程:link

但是,在进程结束后,输出和错误流中的数据将可用(您的程序将在.exec()方法上“停止”,直到子进程结束)。

要与正在运行的进程进行交互,您必须使用其他线程。

Using a thread to capture process output

Interacting with another process Java