我在执行命令行工具时遇到了一些问题。我想从WinRAR执行UnRAR.exe。我是这样做的:
Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile());
我的问题是压缩文件受密码保护。如果我在控制台中执行命令,则会要求输入密码。如果我让Java执行它,程序就会结束,永远不会等待用户输入(密码)。
我试着写进程流输出但是没有用。在“不同”环境中执行的命令行程序的行为是否需要了解?
编辑:也许我不够清楚。我的问题是:是否可以使用Java与命令行程序进行交互?
答案 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 );
+1你的问题,java.lang.Process
正是我所寻找的!
答案 1 :(得分:0)
运行流程并与之交互的方法很少。
java中有Process
个类。它允许获取所有3个子进程流(由java应用程序调用的进程)。
java帮助中的流程类:link
在这里,您可以找到几个代码示例,它们在java中执行流程:link
但是,在进程结束后,输出和错误流中的数据将可用(您的程序将在.exec()方法上“停止”,直到子进程结束)。
要与正在运行的进程进行交互,您必须使用其他线程。