Java执行命令行程序

6

我在执行命令行工具时遇到了一些小问题。我想要执行WinRAR中的UnRAR.exe。我的做法如下:

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

我的问题是压缩文件受到密码保护。如果我在控制台中执行命令,会要求输入密码。但如果让Java执行,则程序只是结束,而不等待用户输入(即密码)。
我尝试向进程输出流写入内容,但没有成功。是否有关于在“不同”环境中执行命令行程序的行为需要知道的事情?
编辑:也许我的表述不够清晰。我的问题是:是否可以与Java交互的命令行程序进行交互?

我添加了新答案并删除了旧的。希望新答案可以满足您的要求。 - Kamil
2个回答

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 );

对你的问题加一,java.lang.Process正是我在寻找的!

http://ideone.com/OUGYv


0

有几种方法可以运行进程并与之交互。

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

Java 中的 Process 类帮助:link

在这里,您可以找到一些在 Java 中执行进程的代码示例:link

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

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

使用线程捕获进程输出

与另一个进程交互 Java


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接