Java执行命令行程序

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

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

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

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

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

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

 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是我想要的!

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

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

java帮助中的进程类: 链接

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

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

要与正在运行的进程交互,您必须使用另一个线程。

使用线程捕获进程输出

与另一个进程Java交互