【问题标题】:Java execute command line programJava执行命令行程序
【发布时间】:2012-02-19 02:18:09
【问题描述】:

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

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

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

我尝试写入进程输出流,但没有成功。关于在“不同”环境中执行的命令行程序的行为,我有什么需要了解的吗?

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

【问题讨论】:

  • 我添加了新答案并删除了旧答案。我希望新的答案能让你满意。

标签: java command-line


【解决方案1】:

为我工作。也许您没有编写换行符并刷新流?

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

【讨论】:

    【解决方案2】:

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

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

    java帮助中的进程类:link

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

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

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

    Using a thread to capture process output

    Interacting with another process Java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2012-08-13
      • 2015-06-15
      • 2017-05-03
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多