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 );
给你的问题+1, java.lang.Process
是我想要的!
运行流程并与之交互的方法很少。
java中有Process
类。 它允许获取所有3个子进程流(由java应用程序调用的进程)。
java帮助中的进程类: 链接
在这里,您可以找到几个代码示例,它们在java: link中执行进程
但是,在进程结束后,输出和错误流中的数据将可用(您的程序将在.exec()方法上“停止”,直到子进程结束)。
要与正在运行的进程交互,您必须使用另一个线程。
使用线程捕获进程输出
与另一个进程Java交互